编辑:我重申了这个问题,因为我不仅无法登录,而且我甚至无法在没有错误的情况下发出简单的POST请求。看下面的代码,它应该返回一个json列表,而不是我得到一个错误页面。
import urllib2 import cookielib import calendar import datetime opener = urllib2.build_opener( urllib2.HTTPRedirectHandler(), urllib2.HTTPHandler(debuglevel = 0), urllib2.HTTPSHandler(debuglevel = 0), urllib2.HTTPCookieProcessor(cookielib.CookieJar()), ) opener.addheaders = [ ('User-agent', "Mozilla/5.0"), ("Content-Type", "application/json") ] data = '{"searchFilter":{"TimeFrame":10000,"NotTradingExotics":false,"Page":0,"PageSize":20,"AffiliateId":-1,"SortExpression":"Ranking","SortDirection":"Ascending"}}'.encode() tmp = calendar.timegm(datetime.datetime.now().utctimetuple()) * 1000 url = "https://www.zulutrade.com/WebServices/Performance.asmx/SearchProviders?_tsmp=" + str(tmp) opener.open(url, data) res = opener.open(url, data) print opener.handlers[7].cookiejar._cookies if "An unexpected error occured" in res.read(): raise Exception("Login failed")
答案 0 :(得分:1)
我使用HTTPFox(用于读取请求的Firefox插件)检查了https://www.zulutrade.com/登录表单,并且您缺少处理登录的POST网址中使用的_tsmp QUERY_STRING参数。我认为您的JSON帖子是正确的,但您错过了该参数(我认为他们使用它来避免回复攻击)。
答案 1 :(得分:1)
这不是您问题的直接答案,但您可能需要考虑使用下面的(稍微简单一点)代码:
import urllib2,cookielib
def Login(username,password):
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
url1 = "https://www.zulutrade.com"
url2 = "https://www.zulutrade.com/WebServices/User.asmx/Login"
data = "?username="+username+"&password="+password
socket = opener.open(url1)
socket = opener.open(url2,data)
return socket.read()