【问题标题】:Can't make POST request无法发出 POST 请求
【发布时间】:2014-01-30 10:04:02
【问题描述】:

编辑:我重申了这个问题,因为我不仅无法登录,而且我什至无法发出简单的 POST 请求而不会出错。请参阅下面的代码,它应该返回一个 json 列表,而不是我得到一个错误页面。

导入 urllib2 导入 cookielib 导入日历 导入日期时间 开瓶器 = urllib2.build_opener( urllib2.HTTPRedirectHandler(), urllib2.HTTPHandler(debuglevel = 0), urllib2.HTTPSHandler(debuglevel = 0), urllib2.HTTPCookieProcessor(cookielib.CookieJar()), ) opener.addheaders = [ ('用户代理', "Mozilla/5.0"), (“内容类型”,“应用程序/json”) ] data = '{"searchFilter":{"TimeFrame":10000,"NotTradingExotics":false,"Page":0,"PageSize":20,"AffiliateId":-1,"SortExpression":"Ranking","SortDirection ":"升序"}}'.encode() tmp = calendar.timegm(datetime.datetime.now().utctimetuple()) * 1000 url = "https://www.zulutrade.com/WebServices/Performance.asmx/SearchProviders?_tsmp=" + str(tmp) opener.open(网址,数据) res = opener.open(网址,数据) 打印 opener.handlers[7].cookiejar._cookies 如果 res.read() 中出现“发生意外错误”: 引发异常(“登录失败”)

【问题讨论】:

    标签: python urllib2


    【解决方案1】:

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

    【讨论】:

    • 检查您的 cookie,您是否发现与 HTTPFox 向您显示的内容有任何对应关系?
    【解决方案2】:

    这不是您问题的直接答案,但您可能想考虑使用下面的(稍微简单一点的)代码:

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

    【讨论】:

      猜你喜欢
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多