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 파일을 검사하여 줄 바꿈을 시도했습니다. 아무 것도 그 트릭을하는 것처럼 보이지 않습니까?
음, '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)'를 사용하십시오. 그러나 이것이 당신의 문제를 해결할 지 확신하지 못합니다. –
바이너리로 읽으십시오 :'xmldata = open (xmlfile, 'rb')'오류를 재현 할 수없는 한 정답은 없습니다. –
xml 파일을 사용하지 않고 디버깅하는 것은 불가능하지만 파일 시작 부분에 BOM이 있어야합니다. Microsoft는 UTF-8 파일에 쓸모없는 BOM을 넣으려는 것으로 유명합니다. 'codecs.BOM_UTF8' 시퀀스 (' '\ xef \ xbb \ xbf')에 대한 파일의 처음 세 문자를 검사하고 거기에 있다면 그것을 제거 할 수 있습니다. –