将python API示例转换为PHP

时间:2013-03-06 00:56:41

标签: php python api rest curl

我需要连接到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

2 个答案:

答案 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的示例。