我想修改以下代码来运行'requests'模块。 我有以下代码在网站上工作:
def post(url, message, key, sign):
curl = pycurl.Curl()
curl.setopt(pycurl.URL, url)
curl.setopt(pycurl.SSL_VERIFYPEER, 0)
curl.setopt(pycurl.SSL_VERIFYHOST, 0)
buf = cStringIO.StringIO()
curl.setopt(pycurl.WRITEFUNCTION, buf.write)
curl.setopt(pycurl.POSTFIELDS, message)
curl.setopt(pycurl.HTTPHEADER, ['Key:' + key,
'Sign:' + (sign)])
curl.perform()
response = buf.getvalue()
buf.close()
return response
我尝试使用请求访问网站,并使用以下代码拒绝了无效请求值:
def post(url, message, key, sign):
import requests
session = requests.session()
session.headers = {'Key': key, 'Sign': sign}
response = session.post(url, message)
return response
这些方法行为不一样,我做错了什么?
谢谢。
答案 0 :(得分:2)
使用Pycurl:
POST /post HTTP/1.1
User-Agent: PycURL/7.32.0
Host: 127.0.0.1:4000
Accept: */*
Key:key
Sign:sign
Content-Length: 3
Content-Type: application/x-www-form-urlencoded
foo
请求:
POST /post HTTP/1.1
Host: 127.0.0.1:4000
Accept-Encoding: identity
Content-Length: 3
Key: key
Sign: sign
foo
有几个不同之处可能导致您的错误:
缺少User-Agent
和Accept
标头。这是因为您覆盖包含这些默认标头的session.headers
属性。试试这个:
session.headers.update({'Key': key, 'Sign': sign})
缺少Content-Type
标题。我认为您传递了一个字符串作为message
参数。
请求不知道这是application/x-www-form-urlencoded
,因此不会设置相关标头。
之一: