현재 다른 사람이 작성한 코드를 사용하고 있습니다. httplib
을 사용하여 서버에 요청합니다. 메시지 본문, 헤더 값 등과 같은 올바른 형식으로 제공된 모든 데이터가 있습니다.Python httplib 및 POST
문제는 POST 요청을 보낼 때마다 데이터가 거기에 있다는 것입니다. 그러나 클라이언트 측 서버에는 아무 것도 도착하지 않습니다. 라이브러리 사양을 읽었으며 사용법이 올바른 것 같습니다.
import httplib
conn = httplib.HTTPConnection('monkeylabs.pl', 80)
conn.connect()
request = conn.putrequest('POST', '/api/snippet/')
headers = {}
headers['Content-Type'] = 'application/json'
headers['User-Agent'] = 'Envjs/1.618 (SpyderMonkey; U; Linux x86_64 2.6.38-10-generic; pl_PL.utf8; rv:2.7.1) Resig/20070309 PilotFish/1.3.pre03'
headers['Accept'] = '*/*'
for k in headers:
conn.putheader(k, headers[k])
conn.endheaders()
conn.send('[{"id":"route"}]')
resp = conn.getresponse()
print resp.status
print resp.reason
print resp.read()
conn.close()
이 몇 가지 알려진 문제, 또는 무엇인가 : 다음과 같이
추출 된 라이브러리 호출
갈? 파이썬 2.7을 사용하고 있습니다. httplib의 버전을 확인하는 방법을 모릅니다.정말 비슷한 것이 아닌 한 (httplib2 아마도) httpsib를 다른 것으로 교환하지 않으십시오. 제가 말했듯이, 코드는 제 것이 아니며 위에 게시 한 것보다 훨씬 많은 양이됩니다. 리팩토링하면 큰 문제가 발생할 수 있습니다. 신뢰할 수있는 해결 방법에 관심이 있습니다.
편집
디버그 출력 :
send: 'POST /api/snippet/ HTTP/1.1\r\nHost: monkeylabs.pl\r\nAccept-Encoding: identity\r\nContent-Type: application/json\r\nAccept: */*\r\nUser-Agent: Envjs/1.618 (SpyderMonkey; U; Linux x86_64 2.6.38-10-generic; pl_PL.utf8; rv:2.7.1) Resig/20070309 PilotFish/1.3.pre03\r\n\r\n[{"id":"route"}]'
reply: 'HTTP/1.0 201 CREATED\r\n'
header: Date: Fri, 10 Jun 2011 23:54:00 GMT
header: Server: WSGIServer/0.1 Python/2.7.1+
header: Vary: Cookie
header: Content-Type: application/json
header: Content-Length: 0
201
CREATED
하는 것으로,이 경우 비어 서버 응답하지 요청 자체에 대한 응답 실제로 회담 후 정보를 제공합니다.
[11/Jun/2011 01:54:00] "POST /api/snippet/ HTTP/1.1" 201 0
그리고 그 세 줄 :
``
<QueryDict: {}>
<QueryDict: {}>
의 아웃 :
print '`%s`' % request.raw_post_data
print request.GET
print request.POST
의 주요 원인은 요청 본문 자체가 내가 로그를 얻어서 관찰 할 수있는 비어 있다는 것입니다 장고 서버. 그래서 그것은 시체를 보내려고 시도하지만 결국에는 보내지 않습니다.
EDIT (2)
좋아, 내가 덤프를 가져다가 실제로 브라우저에서 보낸 메시지에서 생략 된 '콘텐츠 길이'라는 추가 매개 변수가 말해 줬어 도서관 정기 이용. 바보 나. 추가
을 BTW, 당신은 당신이이 일을 많이 디버깅을 할 수있을 거라 생각하면, ([와이어 샤크] http://www.wireshark.org/ 설치) 실제로 사용하고있는 것을 망칠 때 사용하십시오. – Darien
고마워, 처음에는 믿지 않는 사람 이었지만 실제로 해결책을 찾았습니다. 다시 한 번 감사드립니다 – julkiewicz
서버의 응답 : set_header ('Access-Control-Allow-Origin', '*') ???? –