将Python API示例转换为PHP

-1 投票
2 回答
517 浏览
提问于 2025-04-17 18:04

我需要连接到一个RESTful API。公司给我的唯一示例是用Python写的,但我不太懂这个语言,不过我对PHP比较熟悉。请问我能不能用cuRL和/或PHP来实现这个连接呢?

下面是Python的示例:

import requests
import hmac
import hashlib
import datetime as dt
import simplejson as json
import sys


tech_prefix = '' #the Account Tech Prefix
secret_key = '' #the API Key


#creating URI info
t = dt.datetime.utcnow().replace(microsecond=0)
timestamp = t.isoformat()
url_scheme = 'https'
net_location = 'api.thesite.com'
path = '/v1/available-tns/npas/'
method = 'GET'
ordered_query_params = ''
body = ''
body_md5 = ''
canonical_uri = url_scheme + "://" + net_location + path + "\n" + ordered_query_params
tokens = (
    timestamp,
    method,
    body_md5,
    canonical_uri
    )
message_string = u'\n'.join(tokens).encode('utf-8')
signature = hmac.new(secret_key, message_string, digestmod=hashlib.sha1).hexdigest()

headers = {'X-Timestamp':timestamp}
request_url = url_scheme + '://' + net_location + path + '?' + ordered_query_params #    append ordered query params here
request = requests.get(request_url,auth=(tech_prefix,signature),headers=headers)
print request

2 个回答

0

首先,"imports" 就是外部库,PHP里面有这些功能。到 "token" 之前的内容都是一些变量。PHP里处理日期和时间的方法都差不多。然后 "token" 就是一个数组。接着 "message_string" 有 "join" 和 "encode" 方法,这些在JavaScript里也能找到类似的功能。"signature" 有点复杂,简单来说就是在做加密,PHP也有类似的功能。Python的文档写得很好,所以你可以查查Python的函数,然后就能找到对应的PHP函数。

Python、PHP(还有JavaScript)都是基于C语言的。如果你对其中一种语言很熟悉,其他的也能搞定,只要有好的参考资料。正如前面提到的,Python的文档很全面,所以在Google上搜索Python的方法或函数,应该能找到对应的PHP信息。

使用API并不总是轻松,但也不是不可能。大多数情况下,API的工作就是组装一个HTTP请求,然后分析返回的结果。有个小技巧,有时候你可以在API的文档里,或者他们的论坛(如果有的话)找到,甚至技术支持可能会给你发一个HTTP请求的示例。这样你就可以在PHP中构建它。

最后,学习如何在不同语言之间转换是很有用的。听起来这是你第一次接触这个,但大多数网页开发者经常会遇到这样的情况,涉及到各种不同的语言(比如Python、C++、ASP、Ruby等等)。根据我过去的经验,你这个转换算是比较简单的。我真希望在我上一个需要处理的API中也能有这样的例子。

2

是的,你可以在PHP中做到这一点。这个Python代码并没有使用任何特别的Python库,它只是发送了一个带有特定头信息和认证信息的HTTP请求。实际上,把这段代码从Python翻译成PHP,超出了普通StackOverflow回答的范围。

撰写回答