導航:首頁 > 編程語言 > python訪問http

python訪問http

發布時間:2022-07-03 21:01:45

『壹』 python 怎樣設置代理訪問http請求

有幾種方法。一種是設置環境變數http_proxy,它會自動訪問這個。 另外一種是你使用urllib2的時候,在參數里加上代理。還有一個是urllib上指定。

比如
import urllib
urllib.urlopen(某網站,proxyes={'http:':"某代理IP地址:代理的埠"})

使用QT時,它的瀏覽器設置代理要在瀏覽器初始化參數里指定。

『貳』 如何實現Python多進程http伺服器

埠只能綁定一個進程。
1 換成線程實現 SocketServer.ThreadingTCPServer
2 主進程調度分發。主進程收到埠請求後通過進程間通信讓其他進程工作。
我想要用 python 的 multiprocessing 模塊實現一個多進程多線程的 http 伺服器,伺服器會使用進程池 Pool 創建多個子進程,然後每個子進程再用 socketserver 創建多線程的 http 伺服器,但是現在我遇到一個問題,就是伺服器運行以後,只有第一個子進程可以處理 http 連接,如何做到讓每一個子進程都可以處理連接?
備註:通過 getpid 可以看到每次接受請求的都是同一個子進程
# Python 3import os, socketserver, signal, sysfrom multiprocessing import Poolclass MyTCPHandler(socketserver.BaseRequestHandler):

def handle(self):
self.data = self.request.recv(1024)
respone = b'HTTP/1.1 200 OK\r\n\r\nOK%d' % os.getpid()
self.request.sendall(respone)def httpd_task():
socketserver.ThreadingTCPServer.allow_reuse_address = True
server = socketserver.ThreadingTCPServer(('0.0.0.0', 80), MyTCPHandler) try:
server.serve_forever() except: pass
server.server_close()if __name__=='__main__':

p = Pool(4) for i in range(4):
p.apply_async(httpd_task)
p.close()
p.join()

『叄』 python3怎麼http請求

import urllib,urllib2url="http://exmaple.com"data={'usename':'username', 'pass':'pass'}para=urllib.urlencode(data)resposne=urllib2.urlopen(url,para)

『肆』 怎麼知道python發送了什麼http請求

本文實例講述了python通過get,post方式發送http請求和接收http響應的方法。分享給大家供大家參考。具體如下:
測試用CGI,名字為test.py,放在apache的cgi-bin目錄下:
#!/usr/bin/python
import cgi
def main():
print "Content-type: text/html\n"
form = cgi.FieldStorage()
if form.has_key("ServiceCode") and form["ServiceCode"].value != "":
print "<h1> Hello",form["ServiceCode"].value,"</h1>"
else:
print "<h1> Error! Please enter first name.</h1>"
main()

python發送post和get請求
get請求:
使用get方式時,請求數據直接放在url中。
方法一、
import urllib
import urllib2
url = "test.py?ServiceCode=aaaa"
req = urllib2.Request(url)
print req
res_data = urllib2.urlopen(req)
res = res_data.read()
print res

方法二、
import httplib
url = "hest/test.py?ServiceCode=aaaa"
conn = httplib.HTTPConnection("192.168.81.16")
conn.request(method="GET",url=url)
response = conn.getresponse()
res= response.read()
print res

post請求:
使用post方式時,數據放在data或者body中,不能放在url中,放在url中將被忽略。
方法一、
import urllib
import urllib2
test_data = {'ServiceCode':'aaaa','b':'bbbbb'}
test_data_urlencode = urllib.urlencode(test_data)
requrl = "/python_test/test.py"
req = urllib2.Request(url = requrl,data =test_data_urlencode)
print req
res_data = urllib2.urlopen(req)
res = res_data.read()
print res

方法二、
import urllib
import httplib
test_data = {'ServiceCode':'aaaa','b':'bbbbb'}
test_data_urlencode = urllib.urlencode(test_data)
requrl = "python_test/test.py"
headerdata = {"Host":"116"}
conn = httplib.HTTPConnection("192.168.81.16")
conn.request(method="POST",url=requrl,body=test_data_urlencode,headers = headerdata)
response = conn.getresponse()
res= response.read()
print res

對python中json的使用不清楚,所以臨時使用了urllib.urlencode(test_data)方法;
模塊urllib,urllib2,httplib的區別
httplib實現了http和https的客戶端協議,但是在python中,模塊urllib和urllib2對httplib進行了更上層的封裝。
介紹下例子中用到的函數:
1、HTTPConnection函數
httplib.HTTPConnection(host[,port[,stict[,timeout]]])
這個是構造函數,表示一次與伺服器之間的交互,即請求/響應
host 標識伺服器主機(伺服器IP或域名)
port 默認值是80
strict 模式是False,表示無法解析伺服器返回的狀態行時,是否拋出BadStatusLine異常
例如:
conn = httplib.HTTPConnection("1.16",80) 與伺服器建立鏈接。
2、HTTPConnection.request(method,url[,body[,header]])函數
這個是向伺服器發送請求
method 請求的方式,一般是post或者get,
例如:
method="POST"或method="Get"
url 請求的資源,請求的資源(頁面或者CGI,我們這里是CGI)
例如:
url="htti-bin/python_test/test.py" 請求CGI
或者
url="ht_test/test.html" 請求頁面
body 需要提交到伺服器的數據,可以用json,也可以用上面的格式,json需要調用json模塊
headers 請求的http頭headerdata = {"Host":"192.168.81.16"}
例如:
test_data = {'ServiceCode':'aaaa','b':'bbbbb'}
test_data_urlencode = urllib.urlencode(test_data)
requrl = "hgi-bin/python_test/test.py"
headerdata = {"Host":"192.116"}
conn = httplib.HTTPConnection("196",80)
conn.request(method="POST",url=requrl,body=test_data_urlencode,headers = headerdata)

conn在使用完畢後,應該關閉,conn.close()
3、HTTPConnection.getresponse()函數
這個是獲取http響應,返回的對象是HTTPResponse的實例。
4、HTTPResponse介紹:
HTTPResponse的屬性如下:
read([amt]) 獲取響應消息體,amt表示從響應流中讀取指定位元組的數據,沒有指定時,將全部數據讀出;
getheader(name[,default]) 獲得響應的header,name是表示頭域名,在沒有頭域名的時候,default用來指定返回值
getheaders() 以列表的形式獲得header
例如:
date=response.getheader('date');
print date
resheader=''
resheader=response.getheaders();
print resheader

列形式的響應頭部信息:
[('content-length', '295'), ('accept-ranges', 'bytes'), ('server', 'Apache'), ('last-modified', 'Sat, 31 Mar 2012 10:07:02 GMT'), ('connection', 'close'), ('etag', '"e8744-127-4bc871e4fdd80"'), ('date', 'Mon, 03 Sep 2012 10:01:47 GMT'), ('content-type', 'text/html')]
date=response.getheader('date');
print date

取出響應頭部的date的值。

『伍』 python scrapy ip代理訪問http網址出錯但是https的就可以

http代理和https代理是不一樣的,他們相互之間也不能用來代理訪問,你的網站是http就得用http代理,https同理。很多免費代理用起來很難用,一會就失效。

『陸』 python http介面測試腳本怎麼寫

1. 用Python封裝被測試介面,對於HTTP介面我們通常會採用 GET和POST 2種調用方式去訪問,所以必須把這2種方式都封裝進去
# -*- coding:gb2312 -*-
import urllib2,urllib
'''
函數說明:url 特殊字元編碼轉換
作者:xiaonan
輸入參數:待轉換的字元串數據
輸出參數:轉換完成後的字元串數據
'''
def urlcode(data):
return urllib2.quote(str(data))

'''
函數說明:獲取用戶信息的API介面
作者:xiaonan
輸入參數:用戶名(uname),HTTP介面調用方式(GET或者POST)
輸出參數:HTTP介面調用返回數據
'''
def GetUserInfo(uname,method):
if method == 'GET':
url = 'http://ip:port/interface/GetUserInfo.php?uname='+urlcode(uname)
result = urllib2.urlopen(url).read()
return result

if method == 'POST':
url = 'http://ip:port/interface/GetUserInfo.php'
values = {'uname' : uname}
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
result = response.read()
return result
2. 編寫、組織測試腳本, 准備測試數據
根據Testcase的具體業務邏輯用事先准備好的測試數據去調用封裝好的API介面,驗證實際返回結果是否與預期返回結果一致.
測試數據可以以各種形式存放,如Excel數據表:
TestCaseName uname method Expected Result
TestCase1 aaaa GET ....
TestCase2 aaaa POST ....
TestCase3 bbbb GET ....
... ... ... ....
# -*- coding:gb2312 -*-
import xlrd
'''
函數說明: Testcase 腳本
作者:xiaonan
輸入參數:測試數據,API介面
輸出參數:測試日誌,測試報告
'''
def GetUser():
bk = xlrd.open_workbook(excel文件名稱) # 打開excel文件
sh = bk.sheet_by_name(excel表名)# 打開excel表
nrows = sh.nrows # 獲取總行數
for i in range(1,nrows):
TestCase = sh.cell_value(i,0)
uname = sh.cell_value(i,1)
method = sh.cell_value(i,2)
EX_Result=sh.cell_value(i,3)
WriterLog('Testcase Name:'+TestCase+'TestData: uname = '+uname+' ,method = '+method+' ,EX_Result = ' + ,EX_Result) # 寫測試日誌
AC_result = GetUserInfo(uname,method) # 調用API介面
WriterLog('AC_result = ' + AC_result) # 寫測試日誌
if EX_Result == AC_result: #實際結果與預期結果對比
WriterLog(...) #寫測試日誌
WriterReport(...)#寫測試報告
else
WriterLog(...)#寫測試日誌
WriterReport(...)#寫測試報告

3. 組織測試套,用驅動文件去調用執行所有測試套件,完成相關測試,並生成測試日誌及測試報告.
# -*- coding:gb2312 -*-
'''
函數說明: Testsuit Driver驅動腳本
作者:xiaonan
輸入參數:TestCase 腳本
輸出參數:測試日誌,測試報告

'''
if __name__ == '__main__':
...
WriterLog() #寫測試日誌
GetUser() # TestCase 腳本
...
...
Report(....) # 統計匯總所有測試報告數據,以文件或頁面形式呈現.
4. 執行測試腳本,分析測試結果. 根據測試報告,如果有Bug則提交.

『柒』 【Python基礎】http請求是同步還是非同步

同步的
一般http請求都是同步,意味著你調用網路時候必須等著結果返回不能幹別的事
如果是非同步需要自己包裝,也有這樣的庫了

『捌』 如何用Python寫一個http post請求

HTTP 協議規定 POST 提交的數據必須放在消息主體(entity-body)中,但協議並沒有規定數據必須使用什麼編碼方式。常見的四種編碼方式如下:
1、application/x-www-form-urlencoded
這應該是最常見的 POST 提交數據的方式了。瀏覽器的原生 form 表單,如果不設置 enctype 屬性,那麼最終就會以 application/x-www-form-urlencoded 方式提交數據。請求類似於下面這樣(無關的請求頭在本文中都省略掉了):
POST HTTP/1.1 Content-Type:
application/x-www-form-urlencoded;charset=utf-8
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3

2、multipart/form-data
這又是一個常見的 POST 數據提交的方式。我們使用表單上傳文件時,必須讓 form 的 enctyped 等於這個值,下面是示例
POST HTTP/1.1
Content-Type:multipart/form-data; boundary=----
------
Content-Disposition: form-data; name="text"
title
------
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
--------

3、application/json
application/json 這個 Content-Type 作為響應頭大家肯定不陌生。實際上,現在越來越多的人把它作為請求頭,用來告訴服務端消息主體是序列化後的 JSON 字元串。由於 JSON 規范的流行,除了低版本 IE 之外的各大瀏覽器都原生支持 JSON.stringify,服務端語言也都有處理 JSON 的函數,使用 JSON 不會遇上什麼麻煩。
4、text/xml
它是一種使用 HTTP 作為傳輸協議,XML 作為編碼方式的遠程調用規范。
那麼Python在調用外部http請求時,post請求怎麼傳請求體呢?說實話樓主只實踐過【1、application/x-www-form-urlencoded】【2、multipart/form-data 】和【3、application/json】
一、application/x-www-form-urlencoded
import urllib

url = ""
body_value = {"package": "com.tencent.lian","version_code": "66" }
body_value = urllib.urlencode(body_value)
request = urllib2.Request(url, body_value)
request.add_header(keys, headers[keys])
result = urllib2.urlopen(request ).read()

二、multipart/form-data
需要利用python的poster模塊,安裝poster:pip install poster
代碼:
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers

url = ""
body_value = {"package": "com.tencent.lian","version_code": "66" }
register_openers()
datagen, re_headers = multipart_encode(body_value)
request = urllib2.Request(url, datagen, re_headers)
# 如果有請求頭數據,則添加請求頭
request .add_header(keys, headers[keys])
result = urllib2.urlopen(request ).read()

二、application/json
import json

url = ""
body_value = {"package": "com.tencent.lian","version_code": "66" }
register_openers()
body_value = json.JSONEncoder().encode(body_value)
request = urllib2.Request(url, body_value)
request .add_header(keys, headers[keys])
result = urllib2.urlopen(request ).read()

『玖』 python 怎樣設置代理訪問http請求

有幾種方法。一種是設置環境變數http_proxy,它會自動訪問這個。 另外一種是你使用urllib2的時候,在參數里加上代理。還有一個是urllib上指定。 比如 import urllib urllib.urlopen(某網站,proxyes={'http:':"某代理IP地址:代理的埠"}) 使用Q...

閱讀全文

與python訪問http相關的資料

熱點內容
編譯程序輸入一個字元串 瀏覽:402
圓命令畫法 瀏覽:303
如果給電腦e盤文件加密 瀏覽:799
javaswing項目 瀏覽:774
androidsdksetup 瀏覽:1001
pdf怎麼設置中文 瀏覽:124
安卓手機用什麼軟體看倫敦金 瀏覽:962
魅族文件夾無名稱 瀏覽:787
蘇黎世無人機演算法 瀏覽:872
核桃編程和小碼王的融資 瀏覽:681
微積分教材pdf 瀏覽:723
寫python給微信好友發消息 瀏覽:336
蚊帳自營米加密 瀏覽:418
學校推薦核桃編程 瀏覽:802
湖南農信app怎麼導明細 瀏覽:471
福特abs編程 瀏覽:506
如何自學安卓手機 瀏覽:437
以太坊源碼共識機制 瀏覽:910
單片機探測器 瀏覽:870
demo編程大賽作品怎麼運行 瀏覽:51