无法进行POST请求

2024-04-20 16:10:30 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑:我已经重申了这个问题,因为我不仅不能登录,而且我甚至不能发出一个没有错误的简单的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")

Tags: importjsonurl编辑datadatetime错误res
2条回答

我用HTTPFox(一个用于读取请求的Firefox插件)检查了https://www.zulutrade.com/登录表单,您缺少了处理登录的POST url中使用的_tsmpquery_STRING参数。我认为您的JSON帖子是正确的,但是您错过了这个参数(我认为他们使用它来避免回复攻击)。在

HTTPFox showing the parameter

这不是对您的问题的直接回答,但您可能需要考虑使用以下代码(稍微简单一点):

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()

相关问题 更多 >