用Python写文章

用Python写文章,python,post,Python,Post,我有一份数据 data = '{"account_id":2004,"email_address":"mhn34@benu.com","password":"benu123","account_type":"customer","name_prefix":"","first_name":"

我有一份数据

data = '{"account_id":2004,"email_address":"mhn34@benu.com","password":"benu123","account_type":"customer","name_prefix":"","first_name":"MHN","middle_names":"","last_name":"User","name_suffix":"","non_person_name":false,"DBA":"","display_name":"MHNUser","address1":"75 Saint Alphonsus Street","address2":"","address3":"","city":"Boston","state":"MA","postal_code":"02120","nation_code":"USA","phone1":"8127085695","phone2":"","phone3":"","time_zone_offset_from_utc":-5,"customer_type":"1"}'

print data


url = 'http://172.16.139.130:1234/vse/account'
r = requests.post(url, data=data)
print r.text
print r.status_code
我在试着发帖子,我一直在

Traceback (most recent call last):
  File "create_account2.py", line 61, in <module>
    r = requests.post(url, data=data)
  File "/Library/Python/2.7/site-packages/requests/api.py", line 107, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/api.py", line 53, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/sessions.py", line 468, in request
    resp = self.send(prep, **send_kwargs)
  File "/Library/Python/2.7/site-packages/requests/sessions.py", line 576, in send
    r = adapter.send(request, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/adapters.py", line 426, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine("''",))
我得到

@Ni。下面是我的curl`POST/vse/account HTTP/1.1的流内容

Host: 172.16.139.130:1234
User-Agent: curl/7.43.0
Accept: */*
Content-Length: 482
Content-Type: application/x-www-form-urlencoded

{"account_id":2004,"email_address":"mhn34@benu.com","password":"benu123","account_type":"customer","name_prefix":"","first_name":"MHN","middle_names":"","last_name":"User","name_suffix":"","non_person_name":false,"DBA":"","display_name":"MHNUser","address1":"75 Saint Alphonsus Street","address2":"","address3":"","city":"Boston","state":"MA","postal_code":"02120","nation_code":"USA","phone1":"8127085695","phone2":"","phone3":"","time_zone_offset_from_utc":-5,"customer_type":"1"}HTTP/1.1 200 OK
Content-Length: 44
Date: Sat, 30 Apr 2016 18:55:44 GMT

{"status":200,"message":"Success","data":{}}`

试试看
我得到


似乎有一些可能的原因。通常,服务器会根据其头决定拒绝您的请求。它可能连接到用户代理;服务器可能会意识到您没有使用标准浏览器,并希望防止刮取或任何其他类型的编程访问。另一种选择是,您可能试图使用错误的协议(例如http而不是https)进行连接

为了弄清楚到底发生了什么,您可以尝试使用wireshark或其他类似工具来检查您与服务器之间的通信

请在这些链接中阅读更多内容:

更新:由于您的用户代理,您的连接更有可能被拒绝。cURL可以有一个类似浏览器的用户代理,并且不会被拒绝。尝试将您的用户代理设置为类似以下浏览器的内容:

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36'}
r = requests.post(url, data=data, headers=headers)
更新2

首先,这里是cURL参数和python参数之间的区别: python中有
“非人名”:bool(“false”)
,cURL just
“非人名”:“false”

其次,尝试将这些头添加到python请求中:

Host: 172.16.139.130:1234
User-Agent: curl/7.43.0
Accept: */*
Content-Length: 482
Content-Type: application/x-www-form-urlencoded

可能指定
Content Length
是个坏主意,因此,如果它不起作用,请首先将其从标题中删除。

最可能的解决方案似乎是远程站点根据您的请求确定它不是来自使用web浏览器的用户,并且在不发送任何HTTP响应的情况下断开连接。唯一的解决方案是在请求中添加足够的头信息,以伪造远程服务器准备接受的“正确”请求


您可能还希望注意,问题可能是由于向
post
请求传递字符串而不是dict引起的。如图所示,预计会有一个dict。您可以通过删除代码第一行中绑定到
data
的值周围的引号来实现所需的转换。

此处引用,此处查看@0x3l337:mine是http,因此我认为该建议对我不起作用。@ihue可能是您的服务器没有正确响应:/。。我建议你做一些网络流量analysis@ihue我在您的cURL更新后更新了我的答案您是正确的,但是@ihue最好更正
请求。在假设您完全正确之前发布
呼叫。我尝试了您的新标题,得到了
(400,'Bad Request')
确定,这可能意味着这不是正确的协议。。。你试过https吗?试着查看cURL请求的最终形式,并找出它的头和python的请求之间的任何差异。我在执行cURL时添加了流内容。
data = {"account_id":2004,"email_address":"mhn34@benu.com","password":"benu123","account_type":"customer","name_prefix":"","first_name":"MHN","middle_names":"","last_name":"User","name_suffix":"","non_person_name":bool("false"),"DBA":"","display_name":"MHNUser","address1":"75 Saint Alphonsus Street","address2":"","address3":"","city":"Boston","state":"MA","postal_code":"02120","nation_code":"USA","phone1":"8127085695","phone2":"","phone3":"","time_zone_offset_from_utc":-5,"customer_type":"1"}

url = 'http://172.16.139.130:1234/vse/account'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36'}
r = requests.post(url, headers=headers, data=data)

print(r.status_code, r.reason)
(400, 'Bad Request')
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36'}
r = requests.post(url, data=data, headers=headers)
Host: 172.16.139.130:1234
User-Agent: curl/7.43.0
Accept: */*
Content-Length: 482
Content-Type: application/x-www-form-urlencoded