2017-11-22 1 views
0

Pythons 요청 라이브러리를 사용하여 URL에 POST 데이터를 보내려고합니다.외부 파일의 Pythons 요청 라이브러리를 사용하여 URL로 POST 데이터를 보낼 수 없습니다.

스크립트에서 게시물 데이터가 들어있는 여러 줄 문자열 변수를 설정하여이 작업을 시도하면 모든 것이 정상적으로 작동합니다.

동일한 데이터가있는 외부 파일을 읽으려고하면 잘못된 XML이 있다고 생각하기 때문에 내가 게시하는 응용 프로그램 서버에서 요청이 실패합니다.

예를 들어

:

starturl="http://myserver.example.com/location/where/I/post" 
username=user 
password=mypassword 

# Set the XML data 
xmldata="""<?xml version="1.0" encoding="utf-8"?> 
(Lots more xml) 
""" 

# POST the job data 

session = requests.Session() 

request = session.post(starturl, auth=(username,password), data=xmldata, headers=post_headers) 

서버 측 응용 프로그램을 작동은 잘 요청을 처리합니다. 그러나 내가 만든 유일한 변경 사항은 외부 파일에서 xml 데이터를 읽는 것입니다. 더 이상 작동하지 않습니다.

이는

xmlfile="/path/to/my/xmldata.xml" 
xmldata = open(xmlfile,'r') 


session = requests.Session() 
request = session.post(start_url, auth=(username,password), data=xmldata.read(), headers=post_headers) 

서버 측 응용 프로그램을 작동하지 않습니다와 오류 :

"Data at the root level is invalid. Line 1, position 1" 

내가의 요청 본문에 차이가 볼 수 Wireshark와 함께 검사 내 게시하다.

Content-Type: application/xml 
Authorization: Basic c3BvdGFkbTpQQHNzdzByZA== 

<?xml version="1.0" encoding="utf-8"?> 

를 실패하는 경우 : 그것이 작동 할 때 세 개의 작은 점 어딘가에

에서 나타나고있다

Content-Type: application/xml 
Authorization: Basic c3BvdGFkbTpQQHNzdzByZA== 

...<?xml version="1.0" encoding="utf-8"?> 

나는 표시 3 선도적 인 점 원인을 모르겠어요 요청 본문에 원본 XML 파일을 검사하여 줄 바꿈을 시도했습니다. 아무 것도 그 트릭을하는 것처럼 보이지 않습니까?

+0

음, 'xmldata' 파일의 데이터를 읽지 않고 요청을 게시 할 수 있습니다. 설명서의 [this] (http://docs.python-requests.org/ko/members/user/advanced/#streaming-uploads) 부분을 참조하십시오. 'xmldata'가 열린 파일 인'request = session.post (starturl, auth = (username, password), data = xmldata, headers = post_headers)'를 사용하십시오. 그러나 이것이 당신의 문제를 해결할 지 확신하지 못합니다. –

+0

바이너리로 읽으십시오 :'xmldata = open (xmlfile, 'rb')'오류를 재현 할 수없는 한 정답은 없습니다. –

+0

xml 파일을 사용하지 않고 디버깅하는 것은 불가능하지만 파일 시작 부분에 BOM이 있어야합니다. Microsoft는 UTF-8 파일에 쓸모없는 BOM을 넣으려는 것으로 유명합니다. 'codecs.BOM_UTF8' 시퀀스 (' '\ xef \ xbb \ xbf')에 대한 파일의 처음 세 문자를 검사하고 거기에 있다면 그것을 제거 할 수 있습니다. –

답변

1

xml 파일이 없어도 확실하게 말할 수는 없지만 파일 시작 부분에 BOM이있을 수 있습니다. Microsoft는 UTF-8 파일에 쓸모없는 BOM을 넣으려는 것으로 유명합니다.

파일의 처음 세 문자를 확인하여 codecs.BOM_UTF8 시퀀스 ('\ xef \ xbb \ xbf')를 찾아서 제거 할 수 있습니다.

관련 문제