简体   繁体   English

HTTP错误400:错误的请求

[英]HTTP Error 400: Bad Request

I am learning python API testing using urllib2 module.I tried to execute the code.but throwing the following msg.Can anybody help me.Thanks in advance. 我正在学习使用urllib2模块进行python API测试。我试图执行代码。但是抛出以下msg。有人可以帮助我吗?谢谢。

code: 码:

url = "http://localhost:8000/HPFlights_REST/FlightOrders/"

data = {"Class" : "Business","CustomerName" :"Bhavani","DepartureDate" : "2015-10-12","FlightNumber" : "1304","NumberOfTickets": "3"}    
encoded_data = urllib.urlencode(data)
'''print encoded_data
print urllib2.urlopen(url, encoded_data).read()'''    
request = urllib2.Request(url, encoded_data)

print request.get_method()
request.add_data(encoded_data)
response = urllib2.urlopen(request)

Error: 错误:

Traceback (most recent call last):
  File "C:/Users/kanakadurga/PycharmProjects/untitled/API.py", line 44, in <module>
    createFlightOrder()
  File "C:/Users/kanakadurga/PycharmProjects/untitled/API.py", line 39, in createFlightOrder
    response = urllib2.urlopen(request)
  File "C:\Python27\lib\urllib2.py", line 154, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Python27\lib\urllib2.py", line 437, in open
    response = meth(req, response)
  File "C:\Python27\lib\urllib2.py", line 550, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python27\lib\urllib2.py", line 475, in error
    return self._call_chain(*args)
  File "C:\Python27\lib\urllib2.py", line 409, in _call_chain
    result = func(*args)
  File "C:\Python27\lib\urllib2.py", line 558, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 400: Bad Request

Process finished with exit code 1

It looks like you are trying to post data to the server. 您似乎正在尝试将data发布到服务器。

From the URL, I can make a wild guess and assume the server accepts the data in json format, probably. 从URL,我可以做出一个疯狂的猜测,并假设服务器可能接受json格式的数据。

If that is the case then you can do 如果是这样,您可以

import json

url = "http://localhost:8000/HPFlights_REST/FlightOrders/"
data = {"Class": "Business", "CustomerName": "Bhavani", "DepartureDate": "2015-10-12", "FlightNumber": "1304", "NumberOfTickets": "3"}    
encoded_data = json.dumps(data)

request = urllib2.Request(url, encoded_data, {'Content-Type': 'application/json'})
f = urllib2.urlopen(req) # issue the request
response = f.read() # read the response
f.close()
... # your next operations follow

The point is that you need to encode the data correctly (json) and also set the proper content-type header in the HTTP post request, which the server probably checks. 关键是您需要正确编码数据(json),并在HTTP发布请求中设置适当的content-type标头,服务器可能会检查该标头。 Otherwise, the default content-type would be application/x-www-form-urlencoded , as if the data came from a form. 否则,默认内容类型将是application/x-www-form-urlencoded ,就像数据来自表单一样。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM