卷曲效果很好,我可以登录。
curl 'https://server.com/server.jsp?login' --data 'username=usernamex&PASSWORD=contrase%F1a'
对比%F1a15表示“contraseña15”
但是当我尝试使用请求发送相同的内容时,我收到的密码不正确。
payload = 'username=usernamex&PASSWORD=contrase%F1a'
login = "https://server.com/server.jsp?login"
r = requests.post(url=login,data=payload)
print r.text
我如何解决这个问题?我尝试了几个选项。就像有效载荷= {'密码':'contraseña15“..}并使用json.dumps,但没有,总是我收到相同的结果。
请帮助!
编辑: 我也试试这个
import urllib2, urllib
url = 'https://server.com/server.jsp?login'
data = urllib.urlencode({'USUARIO':'username','PASSWORD':'contrase%F1a15'})
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
d = response.read()
print d
没有,我得到相同的结果。仅适用于Curl。
编辑2:
额外的东西
有了这个,我收到了与请求相同的结果
curl 'https://server.com/server.jsp?login' --data 'USUARIO=username&PASSWORD=contraseña15'
但如果我使用它!工作完善。
curl 'https://server.com/server.jsp?login' --data 'USUARIO=username&PASSWORD=contrase%F1a15'
编辑3:
使用PyCurl完美!
import pycurl
c = pycurl.Curl()
c.setopt(c.URL, 'https://server.com/server.jsp?login')
postfields = 'USUARIO=username&PASSWORD=contrase%F1a15'
c.setopt(c.VERBOSE, True)
c.setopt(c.POSTFIELDS, postfields)
c.perform()
c.close()
最后!谢谢@mhawke
溶液:
login_url = 'https://server.com/server.jsp?login'
password = u'contraseña15'.encode('iso-8859-1')
payload = {'username': 'usernamex', 'PASSWORD': password}
r = requests.post(login_url, data=payload)
答案 0 :(得分:1)
尝试发布未编码的值,如下所示:
login_url = 'https://server.com/server.jsp?login'
payload = {'username': 'usernamex', 'PASSWORD': 'contraseña15'}
r = requests.post(login_url, data=payload)
requests
将为您处理网址编码。服务器应该看到
username=usernamex&PASSWORD=contrase%C3%B1a15
在POST的正文中。
<强>更新强>
使用curl
,发布的数据似乎是urlencoded ISO-8859-1文本或类似内容。使用requests
,发布的数据是urlencoded UTF8数据。看来服务器期望请求体的ISO-8859-1编码。试试这个:
login_url = 'https://server.com/server.jsp?login'
password = u'contraseña15'.encode('iso-8859-1')
payload = {'username': 'usernamex', 'PASSWORD': password}
r = requests.post(login_url, data=payload)
有了这个请求,服务器现在应该看到:
username=usernamex&PASSWORD=contrase%F1a15
与curl
生成的内容相同。
答案 1 :(得分:0)
我在我的系统中尝试过这个功能:
import requests
requests.post(login, {'username':'<your username>', 'password':'<your password>'})
我输入的密码与我在表单中输入的密码完全相同。它对我有用,我得到了response code of 200
。
答案 2 :(得分:0)
我的最终评论。 相同的URL和相同的POST DATA。 请求不起作用,但在pycurl中工作。
import requests
import pycurl
login_url = "https://server.com/server.jsp?login"
postfields = 'username=usernamex&PASSWORD=contrase%F1a'
r = requests.post(login_url,postfields)
#This return a html with relatedd with error Login
print r.text
#And this Works perfectly.
c = pycurl.Curl()
c.setopt(c.URL, login_url)
c.setopt(c.VERBOSE, True)
c.setopt(c.POSTFIELDS, postfields)
c.perform()
c.close()