首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >USPS地址验证失败

USPS地址验证失败
EN

Stack Overflow用户
提问于 2014-05-03 23:55:50
回答 1查看 1.5K关注 0票数 2

我试图使用USPS来验证一个地址。我已经通过了注册过程,测试和推广到生产。

我使用PHP和simplexml_load_file函数进行调用。当我在PHP中调用时,USPS返回一个错误:

代码语言:javascript
复制
[Number] => 80040B1A
[Description] => API Authorization failure. Verify is not a valid API name for this protocol.
[Source] => USPSCOM::DoAuth

如果我复制并粘贴传递给simplexml_load_file函数的url,就会得到一个成功的响应:

代码语言:javascript
复制
<AddressValidateResponse><Address ID="0"><Address2>1228 E MAIN ST</Address2><City>MONTROSE</City><State>CO</State><Zip5>81401</Zip5><Zip4>5821</Zip4></Address></AddressValidateResponse>

我使用的url是(用户ID已更改):

代码语言:javascript
复制
http://production.shippingapis.com/ShippingAPI.dll?API=Verify&XML=%3CAddressValidateRequest%20USERID=%123usrid456%27%3E%3CAddress%20ID=%270%27%3E%3CAddress1%3E1228%20East%20Main%20Street%3C/Address1%3E%3CAddress2%3E%3C/Address2%3E%3CCity%3EMontrose%3C/City%3E%3CState%3ECO%3C/State%3E%3CZip5%3E81401%3C/Zip5%3E%3CZip4%3E%3C/Zip4%3E%3C/Address%3E%3C/AddressValidateRequest%3E

我已经打了两次给800 ICCC USPS号码。这些文档在几个方面是缺乏的,例如,他们说注册后电子邮件将包含测试服务器的url,但它们不在电子邮件中。另外,每次都要打电话来寻求支持,等待将近一个小时是令人沮丧的。好吧,抱怨够多了。否则,USPS就太棒了。

我读过许多帖子,尝试过建议的内容,但在PHP中无法调用。以下是我尝试过的:

  • 在提交的url中对XML字符串进行urlencode编码。
  • 整个url的urlencode
  • 测试和生产服务器
  • 卷曲而不是simplexml_load_file
  • 我复制了浏览器地址栏中的url,并将其粘贴到PHP代码中--我仍然得到了相同的错误。

我不知道下一步该尝试什么。特别是当我将传递给simplexml_load_file的url复制/粘贴到浏览器地址栏中时,它可以正常工作。

下面是我试过的一个片段:

代码语言:javascript
复制
$url = "http://production.shippingapis.com/ShippingAPI.dll?API=Verify&XML=<AddressValidateRequest%20USERID='123usrid456'><Address ID='0'><Address1></Address1><Address2>1228 East Main Street</Address2><City>Montrose</City><State>CO</State><Zip5>81401</Zip5><Zip4></Zip4></Address></AddressValidateRequest>";
$addr_data = simplexml_load_file($url);

上述代码中更改的用户ID

我肯定我漏掉了一些显而易见的东西。

提前感谢!

斯隆

EN

回答 1

Stack Overflow用户

发布于 2014-05-04 00:22:41

除了HTTP请求之外,您不仅发送地址(在浏览器和simpleXML中可能是相同的),而且还发送一堆头(例如cookie)。我猜测API也会检查这些头。对于我来说,指定用户名是有点奇怪的,但是访问信息(令牌/密钥/密码)不是--它们不是由浏览器作为cookie发送的吗?重新看一下API规范,特别是一般/身份验证章节;也许您只是忘记了隐藏在这些规范中的一些先决条件。

我会这样做:

  1. 临时转换为curl,这样我就可以更改标题了。
  2. 使用浏览器的网络调试器(例如FirefoxF12->Net)来查看发送了哪些标头。
  3. 设置完全相同的头部卷曲,看看它是否工作。如果它不这样做,就停止使用这种方法。
  4. 逐个删除标题,看看哪些是成功的关键。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23451059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档