Python到PHP:FedEx追踪API的POST请求数据转换指南

Python到PHP:FedEx追踪API的POST请求数据转换指南

本教程详细阐述了将Python脚本中包含JSON字符串的POST请求转换为PHP实现的关键技巧。核心在于理解Python requests.post(data=…) 的行为,它将数据作为URL编码的表单提交,即使其中某个字段的值是JSON字符串。在PHP中,需确保仅将需要作为JSON字符串的特定字段进行 json_encode,而不是对整个请求体进行编码,以避免API返回“UNSUPPORTED.ACTION”错误,从而实现FedEx包裹追踪等复杂API调用的正确转换。

深入理解Python requests.post的数据处理机制

在进行api调用时,理解http请求体的构造方式至关重要。python的 requests 库提供了两种主要的方式来发送post请求的数据:data 参数和 json 参数。

requests.post(url, data=…): 当使用 data 参数时,requests 库会将提供的数据(通常是一个字典或字节串)作为表单数据(application/x-www-form-urlencoded)进行编码并发送。这意味着,如果 data 参数的值是一个字典,requests 会将其键值对转换成 key1=value1&key2=value2 的形式。即使某个 value 本身是一个JSON字符串,它也会被作为普通字符串进行URL编码。requests.post(url, json=…): 当使用 json 参数时,requests 库会将提供的数据(通常是一个字典或列表)自动序列化为JSON字符串,并设置 Content-Type 头为 application/json。

在FedEx包裹追踪的Python示例中,我们可以看到如下代码片段:

data = requests.post('https://www.fedex.com/trackingCal/track', data={    'data': json.dumps({        'TrackPackagesRequest': {            # ... 省略内部结构 ...        }    }),    'action': 'trackpackages',    'locale': 'en_US',    'format': 'json',    'version': 99}).json()

这里,requests.post 使用了 data 参数,并且其值是一个字典。注意,字典中的 data 键对应的值是通过 json.dumps() 序列化后的JSON字符串。这意味着整个请求体实际上是URL编码的表单数据,其中一个字段 data 的值恰好是JSON格式的字符串。服务器期望接收的是一个表单,而不是一个纯粹的JSON请求体。

PHP转换中的常见误区及原因分析

将上述Python逻辑转换为PHP时,常见的错误是直接将整个请求数据结构 json_encode 后作为请求体发送,并设置 Content-Type 为 application/json。

错误的PHP尝试可能如下所示:

立即学习“PHP免费学习笔记(深入)”;

 'application/json']; // 错误:不应是application/json$data = ['data' => [ // 这是一个PHP数组            'TrackPackagesRequest' => [                // ... 省略内部结构 ...            ]],    'action' => 'trackpackages',    'locale' => 'en_US',    'format' => 'json',    'version' => 99    ];$response = Requests::post($url, $headers, json_encode($data)); // 错误:对整个$data数组进行json_encodeprint_r($response);

这段代码会返回 { “CALError”: { “code”:”UNSUPPORTED.ACTION”, “message”:” is not a supported action”, “rootCause”:null } } 错误。

原因分析:

错误的 Content-Type: 将 Content-Type 设置为 application/json 告诉服务器,整个请求体是一个JSON字符串。错误的编码范围: json_encode($data) 将整个PHP数组 $data 转换成了一个JSON字符串。

这与Python脚本中实际发送的请求格式(URL编码的表单数据,其中一个字段的值是JSON字符串)不符。FedEx服务器期望的是一个包含 data、action、locale 等字段的表单,而不是一个直接以 TrackPackagesRequest 开头的JSON对象。

正确的PHP实现方式

要正确地将Python脚本中的逻辑转换为PHP,我们需要模拟Python requests.post(data=…) 的行为:发送URL编码的表单数据,并且只对 data 字段的值进行JSON编码。

以下是修正后的PHP代码示例:

 json_encode([ // 将TrackPackagesRequest部分编码为JSON字符串        "TrackPackagesRequest" => [            "appType" => "wtrk",            "uniqueKey" => "",            "processingParameters" => [                "anonymousTransaction" => true,                "clientId" => "WTRK",                "returnDetailedErrors" => true,                "returnLocalizedDateTime" => false            ],            "trackingInfoList" => [[                "trackNumberInfo" => [                    "trackingNumber" => $tracking_number,                    "trackingQualifier" => "",                    "trackingCarrier" => ""                ]            ]]        ]    ]),    "action" => "trackpackages",    "locale" => "en_US",    "format" => "json",    "version" => 99];// 发送POST请求// Requests::post() 方法如果接收一个数组作为第三个参数($data),// 默认会将其作为 application/x-www-form-urlencoded 类型的表单数据发送$response = Requests::post($url, $headers, $data);// 打印API响应print_r($response);// 进一步处理响应(例如解析JSON)if ($response->success) {    $responseData = json_decode($response->body, true);    // 提取所需信息    $fedex_status  = $responseData['TrackPackagesResponse']['packageList'][0]['keyStatus'] ?? 'N/A';    $fedex_details = $responseData['TrackPackagesResponse']['packageList'][0]['statusWithDetails'] ?? 'N/A';    $delivery_date = $responseData['TrackPackagesResponse']['packageList'][0]['displayActDeliveryDt'] ?? 'N/A';    $delivery_time = $responseData['TrackPackagesResponse']['packageList'][0]['displayActDeliveryTm'] ?? 'N/A';    echo "FedEx Status: " . $fedex_status . "n";    echo "Details: " . $fedex_details . "n";    echo "Delivery Date: " . $delivery_date . "n";    echo "Delivery Time: " . $delivery_time . "n";} else {    echo "Error: " . $response->status_code . " - " . $response->body . "n";}?>

核心改进点:

json_encode 的作用范围: json_encode 函数只应用于 $data 数组中键名为 “data” 的值。这样,TrackPackagesRequest 部分被正确地转换为一个JSON字符串。请求体的构造: 外部的 $data 数组直接传递给 Requests::post 的第三个参数。Requests 库(或底层cURL)会负责将其编码为 application/x-www-form-urlencoded 格式的表单数据。Content-Type 头: 不再手动设置 Content-Type: application/json。让HTTP客户端库自动处理表单提交的 Content-Type,通常是 application/x-www-form-urlencoded。

关键要点与最佳实践

理解API文档: 在进行任何API集成时,仔细阅读API文档是第一步。了解API期望的请求方法(GET/POST)、请求体格式(application/x-www-form-urlencoded、application/json、multipart/form-data 等)以及所需的请求头。区分表单数据和JSON数据:表单数据 (Form Data):通常用于传统网页表单提交,数据以 key=value&key2=value2 的形式编码,Content-Type 通常为 application/x-www-form-urlencoded。JSON数据 (Raw JSON Body):整个请求体是一个JSON字符串,Content-Type 为 application/json。本教程的案例是前者的一个变种:表单数据中包含一个值为JSON字符串的字段。调试工具: 使用Postman、Insomnia或浏览器开发者工具的网络请求监控功能,可以捕获并分析Python脚本实际发送的HTTP请求,包括请求头和请求体,这对于复现请求格式至关重要。错误处理: 在实际应用中,务必对API响应进行充分的错误检查和处理,包括HTTP状态码、API返回的错误信息等。

总结

将Python脚本中涉及复杂数据结构的POST请求转换为PHP时,关键在于精确复刻原始请求的HTTP协议细节。对于像FedEx追踪API这样期望URL编码表单数据,且其中某个字段值本身又是JSON字符串的场景,务必确保 json_encode 的作用范围仅限于该特定字段,而不是整个请求体。通过遵循这些原则,可以有效避免常见的API集成错误,确保跨语言代码转换的成功。

以上就是Python到PHP:FedEx追踪API的POST请求数据转换指南的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1292904.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月11日 08:39:19
下一篇 2025年12月11日 08:39:31

相关推荐

  • 加密货币财库:上市公司的资产革命,还是一场高风险的身份赌注?

    目录 从保险箱到牌桌从对冲通胀到战略核心身份的异化——你买的是软件公司,还是比特币ETF?杠杆的双刃剑——放大的机遇与悬顶的达摩克利斯之剑一场无法回头的身份赌注 自2020年起,以MicroStrategy为代表的上市公司开始将加密货币作为核心财库资产,通过发债和杠杆化操作大规模购入比特币、以太坊等…

    好文分享 2025年12月11日
    000
  • 什么是去中心化应用程序 (dApp)?一文通俗解释中心化应用程序 (dApp)

    在理解去中心化应用程序(dApp)之前,我们有必要先了解我们日常接触的绝大多数应用程序,它们被称为中心化应用程序。我们手机上使用的社交媒体、购物平台、银行应用等,都属于中心化应用。这类应用的特点是其所有的数据和运营逻辑都储存在由某个公司或组织控制的中心服务器上。 这个中心化的实体拥有绝对的控制权,可…

    2025年12月11日
    000
  • 比特币近期表现如何?比特币10年价格回顾与未来走势分析

    目录 近期比特币价格表现近期价格波动原因分析宏观经济因素监管政策动态技术面因素市场情绪与投资者行为比特币 10 年价格回顾未来走势预测投资者参考策略总结 比特币(bitcoin,btc)作为全球最具影响力的加密资产之一,其价格波动一直备受关注。根据最新数据,比特币实时价格为 112,954 美元,过…

    2025年12月11日
    000
  • 数字货币和区块链有什么区别?通俗解释数字货币与区块链的区别

    在当今的科技讨论中,数字货币与区块链是两个频繁被提及的词汇。很多人会将它们混为一谈,认为它们是同一个概念。实际上,它们代表着完全不同但又紧密相连的两个事物。理解它们的区别,就像是理解互联网和电子邮件的区别一样。互联网是基础技术,而电子邮件是建立在这项技术之上的一个具体应用。同样,区块链是一种底层技术…

    2025年12月11日
    000
  • 币圈逢低买入是什么意思?如何在恐慌中获利?

    “逢低买入”(Buy the Dip)是一种广为人知的投资策略,尤其在价格波动剧烈的环境中备受关注。其核心思想是在资产价格经历显著下跌后,投资者判断该下跌是暂时的市场回调而非永久性价值崩溃,从而在相对较低的价位买入资产,期望价格未来能够反弹回升甚至再创新高,以此获得收益。 这种策略本质上是一种逆向投…

    2025年12月11日
    000
  • okex交易所app官方下载 欧易okex交易平台下载v6.134.0 安卓版

    欧易OKEx是一款全球领先的数字资产交易平台,为用户提供比特币(BTC)、以太坊(ETH)等多种主流数字货币的交易服务。该平台以其丰富的交易对、强大的安全性能和流畅的用户体验而受到广大用户的青睐。 欧意okex官网入口: OKEx App下载指南 1、准备开始下载前,请确保您的设备网络连接稳定,以便…

    2025年12月11日
    000
  • Binance币安官方最新版v3.1.7 APP下载安装 2025Bian官网地址链接入口

    币安(Binance)作为全球范围内广受欢迎的数字资产服务平台,为用户提供了丰富多样的加密货币交易、理财及相关衍生品服务。其官方APP设计简洁、功能强大,是众多数字资产爱好者的首选工具。 币安binance官网入口: 币安app官网下载: 下载步骤 1、请点击下方的官方指定下载链接,您的浏览器将自动…

    2025年12月11日
    000
  • 安币binance交易所 v3.2.4 官网最新安卓版

    安币Binance交易所是一款全球领先的数字资产交易平台,为用户提供安全、稳定、便捷的比特币(BTC)、以太坊(ETH)、狗狗币(DOGE)等多种主流加密货币的交易服务。其界面设计友好,功能全面,深受全球投资者的信赖。 币安binance交易所官网入口: 下载步骤 1、请点击下方的链接,开始下载安币…

    2025年12月11日
    000
  • 虚拟货币交易所app v6.133.0 官方安卓版

    以下是根据用户需求整理的虚拟货币交易所排名及介绍: 1. Binance 币安(Binance)是全球领先的加密货币交易平台之一,提供广泛的加密货币交易对和 丰富的金融衍生品服务。该平台以其 高流动性、低交易费用和先进的安全措施 而闻名,吸引了全球数百万用户。币安不仅支持现货交易,还提供期货、期权、…

    2025年12月11日 好文分享
    000
  • 欧易交易app平台 官网正确地址

    欧易交易app是一款功能全面的数字资产交易平台,致力于为全球用户提供安全、便捷、专业的加密货币交易服务。平台支持多种主流数字货币交易,并提供法币交易、杠杆交易、合约交易等多元化服务,满足不同用户的投资需求。本文将为您提供欧易交易app的官方下载链接和详细安装教程,帮助您轻松开始您的数字资产之旅。 欧…

    2025年12月11日 好文分享
    000
  • 欧易官方入口 欧易交易app下载入口一键直达

    欧易是一款知名的数字资产交易平台,致力于为全球用户提供安全、便捷、专业的数字资产交易服务。平台支持多种主流数字货币交易,拥有丰富的交易对选择、高级交易工具以及用户友好的操作界面。本文将为您提供欧易官方app的下载入口及详细安装教程,方便您快速体验其优质服务。 欧易官网一键直达入口: 欧易官方APP下…

    2025年12月11日
    000
  • 币安官网入口一键直达 币安官方最新地址

    币安(binance)是全球领先的加密货币交易平台之一,提供比特币、以太坊、莱特币等多种数字资产的交易服务。平台以其高安全性、低交易费用和友好的用户界面而闻名,深受全球加密货币爱好者的信赖。本文为您提供币安官方最新地址的下载链接,点击即可轻松下载并体验安全便捷的数字资产交易服务。 币安官网入口: 币…

    好文分享 2025年12月11日
    000
  • NFT 与现实权益结合:创新应用场景

    NFT正深度融合现实权益,应用于奢侈品、房地产、音乐等领域,实现资产确权与流通革新,但面临法律合规、技术安全、估值风险及线下管理等挑战,需通过完善监管、强化安全、透明披露和用户教育等机制实现可持续发展。 NFT,或称非同质化代币,已不再仅仅是数字艺术品或收藏品的代名词。随着区块链技术的不断成熟,NF…

    2025年12月11日
    000
  • 币安binance交易所平台app下载安装入口 v3.2.5

    币安(Binance)作为知名的数字资产服务平台,为全球用户提供广泛的数字货币交易、行情查询和资产管理功能。其官方App设计简洁、操作流畅,是许多用户的首选移动端交易工具。 本文将为您提供币安app v3.2.5最新版本的官方下载安装教程,点击文中提供的专属下载链接即可安全获取官方安装文件。 下载步…

    2025年12月11日
    000
  • 新手买币有风险吗?如何才能安全的买入虚拟货币

    对于刚接触虚拟货币的新手来说,买币确实存在一定风险,包括价格波动、账户安全以及交易所操作风险。本文将详细解析如何安全地买入比特币、以太坊等加密货币,并提供实际操作参考,帮助新手降低风险。 新手买币的风险有哪些? 首先,需要了解价格波动大是加密货币的核心风险,短时间内价格可能大幅上涨或下跌。其次,账户…

    2025年12月11日
    000
  • 如何在币圈实现低风险获利?

    在币圈,实现低风险获利是许多新手和中级投资者关注的重点。由于加密货币市场波动较大,直接跟随价格涨跌进行投机可能带来高风险。本文将从安全策略、工具使用及资金管理等角度,为您讲解如何尽量降低风险,实现稳健获利。 低风险获利的核心策略 首先,投资者需要明确风险控制优先,通过分散投资和稳健操作减少潜在损失。…

    2025年12月11日
    000
  • 什么是虚拟货币的套利?怎么参与虚拟货币的买卖

    虚拟货币套利概念解析 虚拟货币套利主要包括以下几种类型: 跨交易所套利:利用不同交易所间同一币种价格差进行买卖。跨币种套利:通过不同币种交易对(如BTC/USDT与ETH/USDT)间的价格波动套利。闪电套利:利用瞬间价格波动进行快速交易,通常需要高速交易工具或机器人辅助。 推荐交易平台与开户指南 …

    2025年12月11日
    000
  • 一文解析 Stablecoin 2.0:稳定币的进阶之路

    Stablecoin 2.0是稳定币的下一代演进,旨在通过去中心化架构、增强透明度、整合现实世界资产(RWA)及优化算法机制,解决当前稳定币在中心化风险、审查阻力、资本效率和脱锚弹性等方面的局限,推动其在DeFi、跨境支付和Web3生态中更广泛、稳健的应用。 什么是Stablecoin 2.0? S…

    2025年12月11日
    000
  • 币安binance安卓版最新版app下载官网 v3.2.5

    币安(Binance)作为全球知名的数字资产交易服务平台,致力于为广大用户提供安全、稳定且高效的交易体验。其官方App功能全面,操作便捷,支持多种主流数字资产的交易。 本文为您提供了币安安卓最新版v3.2.5的官方app下载渠道,点击文内提供的下载链接,即可直接获取官方正版安装包,请按照以下教程完成…

    2025年12月11日
    000
  • 币安binance官方网站登录入口链接地址 币安交易平台官网

    为了帮助用户安全、准确地访问币安交易平台,本文将提供官方网站的直接入口,并详细拆解新用户注册与老用户登录的完整步骤。掌握正确的访问方式是保障您资产安全的第一步,可以有效避免钓鱼网站带来的风险。 如何准确访问币安官网 1、官方核心域名: 币安的全球官方网站是。请认准这个域名,这是访问所有币安服务最直接…

    2025年12月11日
    000

发表回复

登录后才能评论
关注微信