【问题标题】:Post request payload in python在 python 中发布请求有效负载
【发布时间】:2020-04-30 17:40:21
【问题描述】:

我正在尝试编写一个 python 脚本来从此页面获取跟踪信息:https://www.purolator.com/en/app-tracker.page。 在 Chrome 中使用 F12,我得到了标题和请求有效负载,没有表单数据只是请求有效负载。我正在尝试的跟踪号是:GRH000241377

这是我的代码:

 header = {
        'authority': 'api.purolator.com',
        'method': 'POST',
        'path': '/tracker/puro/json/shipment/search',
        'scheme': 'https',
        'accept': 'application/vnd.puro.shipment.trackingevent+json',
        'accept-encoding': 'gzip, deflate, br',
        'accept-language': 'en-CA',
        'content-length': '90',
        'content-type': 'application/vnd.puro.shipment.trackingevent+json',
        'origin': 'https://www.purolator.com',
        'referer': 'https://www.purolator.com/en/app-tracker.page?pin=GRH000241377&sdate=2019-12-09',
        'sec-fetch-mode': 'cors',
        'sec-fetch-site': 'same-site',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/79.0.3945.117 Safari/537.36'
    }

    data = {
        'pins':'[{"pin":"GRH000241377","sequenceID":1}]',
        'searchOptions':'{"includeReference":true}'
    }


    url = "https://www.purolator.com/en/app-tracker.page"
    response = requests.post(url, headers=header, json=data)
    res_json = response.json()

响应代码是 200,但是当我打印 response.text 时,我得到相同的页面而没有任何结果,如果尝试获取 response.json() 我得到下一个错误,我假设错误是因为我没有 json回应

'Error occurred : \n Error Message: Expecting value: line 1 column 1 (char 0)'

可能错误是在数据或标题构造上,但无法找出问题所在。 任何想法? 谢谢

这里是响应头:

access-control-allow-origin: https://www.purolator.com
content-length: 1102
content-security-policy: default-src 'self' *.hs-cpggpc.ca *.canadapost.ca *.cpggpc.ca *.purolator.com *.epost.ca
content-type: application/vnd.puro.shipment+json
date: Tue, 14 Jan 2020 00:37:38 GMT
status: 200
strict-transport-security: max-age=86400; preload
svn-build-number: Purolator.buildLevel.20190622.BF_2019A-B15568.15568
via: 1.1 199fd61d7551d8868317c5b53cc7d24d.cloudfront.net (CloudFront)
x-amz-apigw-id: GQ8E3HOV4osFhyQ=
x-amz-cf-id: Yqyt1uuT9NuucZiYP7arFLAFnTdKbK8yAfRrJ5nfnV7kUyNbhXH0OQ==
x-amz-cf-pop: IAD89-C3
x-amzn-remapped-connection: keep-alive
x-amzn-remapped-content-length: 1102
x-amzn-remapped-date: Tue, 14 Jan 2020 00:37:38 GMT
x-amzn-requestid: a04f8174-fc03-49f5-864c-23bb76ff4434
x-backside-transport: OK OK,OK OK,OK OK,OK OK
x-cache: Miss from cloudfront
x-content-type-options: nosniff
x-frame-options: ALLOW-FROM https://https://www.purolator.com
x-xss-protection: 1; mode=block

【问题讨论】:

  • 能否也附上响应​​头?
  • POST 请求不必返回任何内容,这就是 GET 的用途
  • response.content 中有什么内容?

标签: python python-requests


【解决方案1】:

我希望这会有所帮助。

Python 代码:

import requests

header = {
  'authority': 'api.purolator.com',
  'method': 'POST',
  'path': '/tracker/puro/json/shipment/search',
  'scheme': 'https',
  'accept': 'application/vnd.puro.shipment.trackingevent+json',
  'accept-encoding': 'gzip, deflate, br',
  'accept-language': 'en-CA',
  'content-length': '90',
  'content-type': 'application/vnd.puro.shipment.trackingevent+json',
  'origin': 'https://www.purolator.com',
  'referer': 'https://www.purolator.com/en/app-tracker.page?pin=GRH000241377&sdate=2019-12-09',
  'sec-fetch-mode': 'cors',
  'sec-fetch-site': 'same-site',
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'
}

data = {"trackingNumbers":[{"trackingNumber":"GRH000241377", "type":"Unspecified","sequenceID":1}]}

url = "https://api.purolator.com/tracker/puro/json/shipment/trackingEvent/summary/search"
response = requests.post(url, headers=header, json=data)
res_json = response.json()

print (res_json)

输出:

{"trackingResults": [{"searchStatus": "Found", "foundBy": "Pin", "searchCriteria": {"trackingNumber": "GRH000241377", "type": "Unspecified", "sequenceID": 1}, ..., "isStateBehind": False}

【讨论】:

  • 请阐述并解释问题是什么以及如何解决它。不要指望人们对代码做差异
  • 此 URL“purolator.com/en/app-tracker.page”提供货件跟踪。我在 Google Chrome 中输入此 URL 并按 Enter,然后单击开发工具并转到网络选项卡以跟踪网络请求源。我在输入字段中输入 PIN,然后单击“立即跟踪”按钮。在网络选项卡中,我可以在网络日志中看到所有网络活动,然后我找到了这个 URL “api.purolator.com/tracker/puro/json/shipment/trackingEvent/…”,它返回了跟踪信息。
  • 非常感谢,它有效,但我需要比响应中未显示的更多信息,我正在尝试使用此有效负载:data = {"pins":[{"pin":"GRH000241377", "sequenceID":1}], "searchOptions":{"includeReference":True}} 但响应是:[{'code': 'E019', 'description': "[JSV0001] Invalid value type 'array'."}]
  • 感谢 Neda Peyrone 终于解决了,问题出在 url 和 headers 上!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 2018-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多