2017-05-03 75 views
0

我试图使用Python POST请求来自动OP.GG召唤师轮廓的清爽:Python的POST请求418错误

在页面上有一个调用下面的JavaScript文件按钮: https://opgg-static.akamaized.net/js3/summoner.js?1492755586

浏览此网址:https://na.op.gg/summoner/userName=hamski

运行的代码在Chrome的控制台中的后续片段完美的作品。按预期刷新配置文件。

$.OP.GG.ajax.getJSON({ 
    url: ('/summoner/ajax/renew.json/'), 
    method: 'post', 
    data: { 
     summonerId: 47220368 
    }, 
    callback: { 
     onJSON: function(json){ 
      console.log(json) 
     }, 
     onError: function(error){ 
      $.OP.GG.summoner.renewBtn.stop(btn); 
      alert(error); 
     } 
    } 
}); 

我没有使用请求模块

import json 
import requests 

url = "https://na.op.gg/summoner/ajax/renew.json/" 

payload = { 
    'summonerId': 47220368, 
} 

data=json.dumps(payload) 

print data 

r = requests.post(url, data) 

print r 
print r.status_code 
print r.text 

其结果是418错误POST请求。

<Response [418]> 418

r.text基本上给了我这个页面的HTML: https://na.op.gg/summoner/ajax/renew.json/


更新代码:

import json 
import requests 
from fake_useragent import UserAgent 

ua = UserAgent(cache=False) 


url = "https://na.op.gg/summoner/ajax/renew.json/" 

payload = { 
    'summonerId': 47220368, 
} 

headers = requests.utils.default_headers() 
headers.update(
{ 
    'User-Agent':ua.random 
}) 

print ua.random 

session = requests.Session() 
r1 = session.get("https://na.op.gg/summoner/userName=hamski",headers=headers) 
print session.cookies.get_dict() 

r = requests.post(url, data=json.dumps(payload),cookies=r1.cookies, headers=headers) 

print r 
print r.status_code 
print r.text 
+0

你一直在谈茶壶。错误代码418“我是茶壶”是一个愚蠢的玩笑。看起来开发者有些幽默。您的问题应该来自浏览器已经过身份验证并且Python请求不是。检查浏览器控制台的网络选项卡,查看请求中是否有任何内容可以对其进行身份验证。 –

+0

仍不确定问题是什么。你能通过检查网络标签来详细说明你的意思吗?我在头上添加了一个随机用户代理以及默认头文件。我还从以前的会话中检索了Cookie,并在发布请求中添加了这些Cookie。运行代码获得相同的结果。非常感谢! – zhivago

回答

0

我能找出什么在失踪我的请求使用请求拦截器 - 名为“邮递员”的Chrome扩展

原来,cookies和标题完全没有关系。

用data = payload替换data = json.dumps(payload)解决了这个问题。