将请求python跨域发布到DWR服务器

时间:2014-01-11 14:51:10

标签: python python-requests dwr

我希望向dwr服务器发送请求,其中包含一些有效负载日期:

callCount=1
c0-scriptName=Manager
c0-id=3992_1389451476736
c0-param1=string:
c0-param15=string:
c0-param16=string:-1
c0-param17=string:1
xml=true

我使用请求python我的第一个问题是我不知道什么样的数据接受dwr(字符串,json或...)我的代码是

url = 'https://example.com/Manage.dwr'
headers = {
}

data = 'callCount=1c0-scriptName=MMTPManagerc0-methodName=saveMMTPOrderc0-id=7140_1389449863325c0-param0=string:072CD0A2FE4DAD0450457485587ADB5Cc0-param1=string:c0-param2=string:IRO1MAPN0001c0-param3=string:12190060428937%20%20c0-param4=string:Ac0-param5=string:20000c0-param6=string:0c0-param7=string:c0-param8=string:12913c0-param9=string:Lc0-param10=string:Jc0-param11=string:c0-param12=number:758944325c0-param13=string:2c0-param14=number:1389448044227c0-param15=string:c0-param16=string:-1c0-param17=string:1xml=true'



def req():
    r = requests.post(url, data=data, headers=headers)
    print r.text
    print r.headers
req()

并且回复是

//<script type='text/javascript'>
alert('Error. This may be due to an unsupported browser.\nSee the mailing lists at http://www.getahead.ltd.uk/dwr/ for more information.');
//</script>

为每一个想法和帮助感恩 感谢

1 个答案:

答案 0 :(得分:2)

之前从未听说过dwr,我快速查看了Direct Web Remoting网站。由于它看起来需要在客户端上理解JavaScript的东西,所以不能单独使用请求。

请求不会对网页内容进行任何处理。由于请求不会为您处理JavaScript,因此您需要使用更像selenium(在python中具有绑定)的内容。

混合使用硒这样的东西,您可能需要将请求中的User-Agent标题更改为看起来像真实浏览器的标题。您的请求如下:

r = requests.post(url, data=data, headers={'User-Agent': '<browser user agent>'}

其中'<browser user agent>'是从浏览器中获取的字符串。可能有效的示例可以是

Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0

Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36