我需要连接到RESTful API。公司给我连接到他们的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
答案 0 :(得分:2)
是的,您可以在PHP中执行此操作。这个python代码不使用任何特殊的python库;它只是发送带有特定标头和特定身份验证信息的HTTP请求。实际上,将此代码从python转换为PHP不在典型StackOverflow答案的范围内。
答案 1 :(得分:0)
首先,“导入”只是外部库,PHP内置它们。所有令牌都只是变量。日期和时间方法在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的示例。