0

我需要连接到 RESTful API。公司给我的唯一一个连接到他们的 API 的例子是 Python 中的一个例子。我不懂语言,但对 PHP 很满意。有没有办法用 curRL 和/或 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
4

2 回答 2

2

是的,您可以在 PHP 中执行此操作。此 python 代码不使用任何特殊的 python 库;它只是发送带有特定标头和特定身份验证信息的 HTTP 请求。不过,实际上将这段代码从 python 翻译成 PHP 超出了典型的 StackOverflow 答案的范围。

于 2013-03-06T00:58:33.833 回答
0

首先,“导入”只是外部库,PHP 内置了它们。直到 token 的所有内容都只是变量。日期和时间方法在 PHP 中都有类似的功能。那么“令牌”只是一个数组。然后 "message_string" 有一个 "join" 和 "encode" 方法,这些方法类似于您在 Javascript 中找到的方法。“签名”有点混乱,但它基本上是在做加密,PHP 也有类似的功能。Python 有很好的文档,所以查找 Python 的函数,然后你应该能够找出哪个 PHP 函数是相似的。在“签名”之后,它只是将所有变量组装到 HTTP 请求中并发送它。

Python 和 PHP(和 javascript)是基于 C 的语言。如果你擅长其中一个,你可以找出另一个,只要你有好的参考资料。如前所述,Python 有很好的文档记录,因此 Google 搜索 Python 方法或函数应该会找到您需要的信息,以找到它的 PHP 等效项。

使用 API 从来都不是一件有趣的事,但它们并非不可能。它们中的大多数分解为您必须组装的 HTTP 请求,然后分解响应。一个小技巧,有时你可以在 API 的文档中找到,或者在他们的论坛上(如果他们有的话)或者技术支持会向你发送一个 HTTP 请求应该是什么样子的示例。然后你可以在 PHP 中构建它。

作为结束语,最好学习如何在语言之间进行转换。听起来这是您第一次使用它,但大多数 Web 开发人员经常遇到这种情况,并且使用各种不同的语言(python、c++、asp、ruby 等)。根据我过去遇到的情况,您的转换相当简单。我很想把它作为我必须使用的最后一个 API 的示例。

于 2013-03-06T04:43:11.217 回答