0
我想在Python中查詢網站。我需要使用POST方法(根據當我使用開發人員工具監視它時瀏覽器中發生的情況)。在Python中的POST方法:errno 104
如果我查詢與捲曲的網站,它工作得很好:
curl -i --data "param1=var1¶m2=var2" http://www.test.com
我得到這樣的標題:
HTTP/1.1 200 OK
Date: Tue, 26 Sep 2017 08:46:18 GMT
Server: Apache/1.3.33 (Unix) mod_gzip/1.3.26.1a mod_fastcgi/2.4.2 PHP/4.3.11
Transfer-Encoding: chunked
Content-Type: text/html
但是,當我在Python 3做,我得到一個錯誤104。
這是我到目前爲止所嘗試的。首先,urllib
(從this thread獲得靈感來管理使用POST方法而不是GET):
import re
from urllib import request as ur
# URL to handle request
url = "http://www.test.com"
data = "param1=var1¶m2=var2"
# Build a request dictionary
preq = [re.findall("[^=]+", i) for i in re.findall("[^\&]+", data)]
dreq = {i[0]: i[1] if len(i) == 2 else "" for i in preq}
# Initiate request & add method
ureq = ur.Request(url)
ureq.get_method = lambda: "POST"
# Send request
req = ur.urlopen(ureq, data=str(dreq).encode())
我也基本相同與requests
:
import re
import requests
# URL to handle request
url = "http://www.test.com"
data = "param1=var1¶m2=var2"
# Build a request dictionary
preq = [re.findall("[^=]+", i) for i in re.findall("[^\&]+", data)]
dreq = {i[0]: i[1] if len(i) == 2 else "" for i in preq}
# Initiate request & add method
req = requests.post(url, data=dreq)
在這兩種情況下,我得到一個HTTP 104錯誤:
ConnectionResetError: [Errno 104] Connection reset by peer
我不明白,因爲相同的請求正在使用cURL。我想我誤解了Python的請求,但到目前爲止我被卡住了。任何提示將不勝感激!