Python 请求 POST 缺少 Content-Length 特定 URL

Python Requests POST missing Content-Length for specific URL

我正在尝试使用 Requests 模块执行基本的 POST 请求,但 Content-Length 始终缺失,因此服务器忽略了负载。我的有效负载是字典,但请求似乎无法计算 Content-Length.

这是我的代码:

form = {
'InternalApplicationSource' : 'signedinhome.recommendedjobs',
'__RequestVerificationToken' : str(rvt),
'Candidate.CVName' : 'CV.docx',
'JobTitle' : str(jtl),
'AppSource.AppSourceId' : '',
'AppSource.MatchCount' : '',
'IsExternalApplication' : 'False',
'Candidate.CoverLetterPreference' : 'None',
'Candidate.IsExternalApplication' : 'False',
'JobId' : str(jid),
'Source' : 'signedinhome.recommendedjobs',
'UserHasRegisteredThroughJob' : 'False'
}


post_headers = {
'Host': 'www.reed.co.uk',
'Origin' : 'https://www.reed.co.uk',
'User-Agent': browser,
'Accept': '*/*',
'Accept-Language': 'en-US,en;q=0.7,jv;q=0.3',
'Accept-Encoding': 'gzip, deflate, br',
'DNT': '1',
'Connection': 'keep-alive',
'TE': 'Trailers'
}

post_headers.update({'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Referer' : joburl , 'X-Requested-With': 'XMLHttpRequest', 'Content-Length':str(len(form))})
postres = session.post('https://www.reed.co.uk/api/application/apply',headers=post_headers,data=form)

而这些是实际发送的header(从postres.request.headers获得)

User-Agent : Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0
Accept-Encoding : gzip, deflate, br
Accept : */*
Connection : keep-alive
Host : www.reed.co.uk
Origin : https://www.reed.co.uk
Accept-Language : en-US,en;q=0.7,jv;q=0.3
DNT : 1
TE : Trailers
Referer : https://www.reed.co.uk/jobs/
X-Requested-With : XMLHttpRequest

我已经尝试过设置 Content-Length(如上所述)并简单地让 Requests 计算它,但这种情况从未发生过,总是 header已发送。

我注意到它也省略了 Content-Type header - 这是否意味着这是一个编码问题?

有人知道如何解决这个问题吗?

编辑:我还注意到这只发生在这个特定的 URL 上,任何其他 URL 似乎都没问题(content-length 和类型都可以)。我只能假设这是请求模块的问题,因为它涉及发送的数据。也许请求模块首先检查 URL 并且以某种方式对不同的 URLs 采取不同的行为?

原来我的请求被重定向了,所以我在屏幕上打印的只是最后一个请求...当我使用 allow_redirects=False 时,我终于可以看到我原来的 POST 请求.而且我可以看到实际上 Content-Type 和 Content-Length 都在那里,都是正确的!