2015-02-17 16 views
16

Tôi đang cố gắng sử dụng mô-đun yêu cầu Python để phát lệnh Http GET để truy cập một số API dựa trên REST. Các url đang làm việc tốt trên một RESTClient nhưng khi tôi sử dụng cùng một url trong python, tôi nhận được một lỗi kết nối.Python requests.exception.ConnectionError: kết nối bị hủy bỏ "BadStatusLine"

Mã Tôi cố gắng để thực hiện là:

payload={"mac":new_mac,"token":token} 
userloginurl="http://192.168.1.40:9119/uid" 
r=requests.get(userloginurl,params=payload) 
print(r.url) 

Nếu tôi thử nghiệm url này sử dụng RESTClient, tôi nhận được một mã số 200 OK tình trạng trong tiêu đề phản ứng cùng với một số lĩnh vực hơn. enter image description here Nhưng điều này không hoạt động với các yêu cầu python. Traceback của lỗi được hiển thị bên dưới:

Traceback (most recent call last): 
File "getAPids.py", line 34, in <module> 
r=requests.get(userloginurl,params=payload) 
    File "C:\Users\garvitab\python\lib\site-packages\requests\api.py", line 65, in 
get 
return request('get', url, **kwargs) 
File "C:\Users\garvitab\python\lib\site-packages\requests\api.py", line 49, in 
request 
response = session.request(method=method, url=url, **kwargs) 
File "C:\Users\garvitab\python\lib\site-packages\requests\sessions.py", line 4 
61, in request 
resp = self.send(prep, **send_kwargs) 
File "C:\Users\garvitab\python\lib\site-packages\requests\sessions.py", line 5 
73, in send 
r = adapter.send(request, **kwargs) 
File "C:\Users\garvitab\python\lib\site-packages\requests\adapters.py", line 4 
15, in send 
raise ConnectionError(err, request=request) 
requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine("''", 
)) 

Tôi đã tìm hiểu nguyên nhân của vấn đề. Có thể, phản hồi nhận được không được định dạng đúng. Có cách nào để xử lý vấn đề này không?

Xin cảm ơn trước.

Trả lời

18

Sự cố xảy ra với url. Kết nối này có nghĩa là được thiết lập trên https và tôi đã sử dụng http trong kịch bản lệnh python. Do đó vấn đề.

+0

nó hoạt động nhờ – einverne

+1

Vui vì tôi có thể giúp :) – BajajG

2

Bạn đã thực sự kiểm tra, những gì được gửi qua dây? Tôi cho rằng bạn có thể phải chuyển từ điển của bạn thành chuỗi JSON một mình hoặc sử dụng từ khóa json= thay vì payload=. Xem http://docs.python-requests.org/en/latest/user/quickstart/#custom-headers để biết chi tiết. Điều này có thể thực hiện thủ thuật:

import json 
payload = json.dumps({"mac":new_mac,"token":token}) 
userloginurl = "http://192.168.1.40:9119/uid" 
r = requests.get(userloginurl, data=payload) 
print(r.url) 
+0

Cảm ơn bạn đã trả lời lại. Tôi đã thử phương pháp này nhưng lỗi vẫn tồn tại. Theo các câu hỏi SO khác về chủ đề này, đây là vấn đề về phản hồi được định dạng không đúng do máy chủ tạo hoặc mã trạng thái không xác định được tạo trong phản hồi. Tôi vẫn đang cố gắng tìm ra nguyên nhân chính xác của lỗi. – BajajG

+0

Một trong những cách nhanh nhất để tìm hiểu những gì đang xảy ra trên các kết nối không được mã hóa là chỉ đơn giản là đánh hơi lưu lượng truy cập của bạn bằng cách sử dụng wireshark cho cả hai yêu cầu và so sánh sự khác biệt. Trên lưu lượng được mã hóa, hãy bật đầu ra gỡ lỗi của các yêu cầu thô được gửi. – Michael

+0

Cảm ơn bạn đã đề xuất nhưng vấn đề thực sự là với url. – BajajG

Các vấn đề liên quan