2008-09-29 5 views
7

이것은 거의 Send file using POST from a Python script의 중복 파일입니다.하지만 경고문을 추가하고 싶습니다. 필자는 필드 및 첨부 파일의 인코딩을 올바르게 처리해야합니다. 비 ASCII 문자가 포함 된 유니 코드 문자열을 믹스에 포함 시키면 내가 찾던 해답을 찾을 수있었습니다. 또한 대부분의 솔루션은 일곱 비트를 깨끗하게 유지하기 위해 데이터를 base64 인코딩하지 않습니다.Python 스크립트에서 POST를 사용하여 파일 보내기

답변

5

제가 생각할 수있는 가장 좋은 점은 직접 인코딩하는 것입니다. 이 서브 루틴은 어때?

from urllib2 import Request, urlopen 
from binascii import b2a_base64 

def b64open(url, postdata): 
    req = Request(url, b2a_base64(postdata), headers={'Content-Transfer-Encoding': 'base64'}) 
    return urlopen(req) 

conn = b64open("http://www.whatever.com/script.cgi", u"Liberté Égalité Fraternité") 
# returns a file-like object 

는 (좋아, 그럼이 코드는 단지 POST 데이터를 전송한다. 그러나 당신이 바로? 음, 꽤 간단 조합이다,에 "업로드 파일"버튼을 클릭 한 것처럼 분명히, 다중 인코딩 된 데이터를 원하는 여기에 귀하가 링크 한 질문의 답이 있습니다.)

1

PyCURL은 Python의 CURL에 대한 인터페이스를 제공합니다.

http://curl.haxx.se/libcurl/python/

은 컬는 당신이 필요로하는 모든 것을 할 것입니다. 바이너리 파일을 올바르게 전송할 수 있고 많은 인코딩을 지원합니다. 그러나 파일을 게시 할 때 사용자 정의 헤더로 적절한 문자 인코딩을 사용해야합니다.

http://curl.haxx.se/docs/httpscripting.html (4.3 절) 곱슬

(또는 다른 HTTP 클라이언트)는 콘텐츠 인코딩을 설정해야 할 수 있습니다

특히, 당신은 '파일 업로드'스타일 POST를 수행해야 할 수 있습니다 :

콘텐츠 유형 : text/html; 문자셋 = UTF-8 또한

, 요청 헤더가 ASCII해야한다는 인식, 이것은 URL (그래서 당신은 제대로 아마도 유니 코드 URL을 탈출해야합니다. 유니 코드는 HTTP 헤더에 대한 빠져있다) 포함이 최근에 파이썬에서 수정되었습니다 :

http://bugs.python.org/issue3300

나는 당신의 기본 문자는 서버에 설정된 설정을 포함하여 주제에 대한 더 많은 정보는,이,이 도움이 되었으면 좋겠 등

관련 문제