通过 post 使用 php 发送 XML

2024-05-23

我知道有很多类似的问题,但我尝试过摆弄所有的解决方案,但似乎无法使其发挥作用。我正在尝试将 xml 直接发布到 Web 服务并获得响应。从技术上讲,我正在尝试连接到freightquote.com,您可以在右上角找到该文档this https://b2b.freightquote.com/faqs.aspx文档下的页面。我之所以提到这一点,是因为我在他们的 xml 中经常看到 SOAP 这个术语,它可能会有所不同。无论如何,我想要的是能够将 xml 发送到某个 url 并获得响应。

所以如果我有以下内容

$xml = "<?xml version='1.0' encoding='utf-8'?>
            <soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' 
            xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
            xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
            <soap:Body>
              <GetRatingEngineQuote xmlns='http://tempuri.org/'>
                <request>
                  <CustomerId>0</CustomerId> <!-- Identifier for customer provided by Freightquote -->
                  <QuoteType>B2B</QuoteType> <!-- B2B / eBay /Freightview -->
                  <ServiceType>LTL</ServiceType> <!--  LTL / Truckload / Groupage / Haulage / Al  -->
                  <QuoteShipment>
                    <IsBlind>false</IsBlind>
                    <PickupDate>2010-09-13T00:00:00</PickupDate>
                    <SortAndSegregate>false</SortAndSegregate>
                    <ShipmentLocations>
                      <Location>
                        <LocationType>Origin</LocationType>
                        <RequiresArrivalNotification>false</RequiresArrivalNotification>
                        <HasDeliveryAppointment>false</HasDeliveryAppointment>
                        <IsLimitedAccess>false</IsLimitedAccess>
                        <HasLoadingDock>false</HasLoadingDock>
                        <IsConstructionSite>false</IsConstructionSite>
                        <RequiresInsideDelivery>false</RequiresInsideDelivery>
                        <IsTradeShow>false</IsTradeShow>
                        <IsResidential>false</IsResidential>
                        <RequiresLiftgate>false</RequiresLiftgate>
                        <LocationAddress>
                          <PostalCode>30303</PostalCode>
                          <CountryCode>US</CountryCode>
                        </LocationAddress>
                        <AdditionalServices />
                      </Location>
                      <Location>
                        <LocationType>Destination</LocationType>
                        <RequiresArrivalNotification>false</RequiresArrivalNotification>
                        <HasDeliveryAppointment>false</HasDeliveryAppointment>
                        <IsLimitedAccess>false</IsLimitedAccess>
                        <HasLoadingDock>false</HasLoadingDock>
                        <IsConstructionSite>false</IsConstructionSite>
                        <RequiresInsideDelivery>false</RequiresInsideDelivery>
                        <IsTradeShow>false</IsTradeShow>
                        <IsResidential>false</IsResidential>
                        <RequiresLiftgate>false</RequiresLiftgate>
                        <LocationAddress>
                          <PostalCode>60606</PostalCode>
                          <CountryCode>US</CountryCode>
                        </LocationAddress>
                        <AdditionalServices />
                      </Location>
                    </ShipmentLocations>
                    <ShipmentProducts>
                      <Product>
                        <Class>55</Class>
                        <Weight>1200</Weight>
                        <Length>0</Length>
                        <Width>0</Width>
                        <Height>0</Height>
                        <ProductDescription>Books</ProductDescription>
                        <PackageType>Pallets_48x48</PackageType>
                        <IsStackable>false</IsStackable>
                        <DeclaredValue>0</DeclaredValue>
                        <CommodityType>GeneralMerchandise</CommodityType>
                        <ContentType>NewCommercialGoods</ContentType>
                        <IsHazardousMaterial>false</IsHazardousMaterial>
                        <PieceCount>5</PieceCount>
                        <ItemNumber>0</ItemNumber>
                      </Product>
                    </ShipmentProducts>
                    <ShipmentContacts />
                  </QuoteShipment>
                </request>
                <user>
                  <Name>[email protected] /cdn-cgi/l/email-protection</Name>
                  <Password>password</Password>
                </user>
              </GetRatingEngineQuote>
            </soap:Body>
            </soap:Envelope>";

(我编辑了它以包含我的实际 xml,因为它可能会提供一些视角

我想将其发送至http://www.someexample.com http://www.someexample.com并得到回应。另外,我需要编码吗?我已经用 android 来回发送了很多 xml,但从来没有这样做过,但这可能是我的问题的一部分。

我当前发送信息的尝试如下所示

$xml_post_string = 'XML='.urlencode($xml->asXML());  
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'https://b2b.Freightquote.com/WebService/QuoteService.asmx');
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$response = curl_exec($ch);
curl_close($ch);

如果您正在使用 SOAP 服务,我强烈建议您学习一次基础知识,然后一次又一次地使用这个出色的工具。有很多功能您可以直接使用,否则您将重新发明轮子,并在生成 xml 文件、解析 xml 文件、错误等方面苦苦挣扎。使用准备好的工具,您的生活会更轻松,您的代码也会更好(错误更少)。

Look at http://www.php.net/manual/en/soapclient.soapcall.php#example-5266 http://www.php.net/manual/en/soapclient.soapcall.php#example-5266如何使用 SOAP Web 服务。这并不难理解。

以下是一些如何分析 Web 服务的代码。然后将类型映射到类并发送和接收 php 对象。您可以寻找一些自动生成类的工具(http://www.urdalen.no/wsdl2php/manual.php http://www.urdalen.no/wsdl2php/manual.php).

<?php
try
{
    $client = new SoapClient('http://b2b.freightquote.com/WebService/QuoteService.asmx?WSDL');

    // read function list
    $funcstions = $client->__getFunctions();
    var_dump($funcstions);

    // read some request obejct
    $response = $client->__getTypes();
    var_dump($response);
}
catch (SoapFault $e)
{
    // do some service level error stuff
}
catch (Exception $e)
{
    // do some application level error stuff
}

如果您使用 wsdl2php 生成工具,一切都非常简单:

<?php

require_once('./QuoteService.php');

try
{
    $client = new QuoteService();

    // create request
    $tracking = new TrackingRequest();
    $tracking->BOLNumber = 67635735;

    $request = new GetTrackingInformation();
    $request->request = $tracking;

    // send request
    $response = $client->GetTrackingInformation($request);
    var_dump($response);
}
catch (SoapFault $e)
{
    // do some service level error stuff
    echo 'Soap fault ' . $e->getMessage();
}
catch (Exception $e)
{
    // do some application level error stuff
    echo 'Error ' . $e->getMessage();
}

生成的 php 代码为QuoteService.php你可以在这里看到:http://pastie.org/8165331 http://pastie.org/8165331

这是捕获的通信:

Request

POST /WebService/QuoteService.asmx HTTP/1.1
Host: b2b.freightquote.com
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.4.17
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://tempuri.org/GetTrackingInformation"
Content-Length: 324

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/">
    <SOAP-ENV:Body>
        <ns1:GetTrackingInformation>
            <ns1:request>
                <ns1:BOLNumber>67635735</ns1:BOLNumber>
            </ns1:request>
        </ns1:GetTrackingInformation>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Response

HTTP/1.1 200 OK
Date: Mon, 22 Jul 2013 21:46:06 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 660
Set-Cookie: BIGipServerb2b_freightquote_com=570501130.20480.0000; path=/

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <GetTrackingInformationResponse xmlns="http://tempuri.org/">
            <GetTrackingInformationResult>
                <BOLNumber>0</BOLNumber>
                <EstimatedDelivery>0001-01-01T00:00:00</EstimatedDelivery>
                <TrackingLogs />
                <ValidationErrors>
                    <B2BError>
                        <ErrorType>Validation</ErrorType>
                        <ErrorMessage>Unable to find shipment with BOL 67635735.</ErrorMessage>
                    </B2BError>
                </ValidationErrors>
            </GetTrackingInformationResult>
        </GetTrackingInformationResponse>
    </soap:Body>
</soap:Envelope>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 post 使用 php 发送 XML 的相关文章

  • 阻止表单 POSTing,直到 javascript 代码得到满足

    每当我点击提交按钮时它就会触发alert empty username 但直接引导我去checklogin php 我怎样才能避免这种情况并让它保留在页面上 除非该字段不为空 function RequiredFields var user
  • 如何在 Golang 中将 []byte XML 转换为 JSON 输出

    有没有办法在 Golang 中将 XML byte 转换为 JSON 输出 我有以下功能body is byte但我想在一些操作之后将此 XML 响应转换为 JSON 我试过了Unmarshal in xml打包没有成功 POST func
  • PHP PDO相关:更新SQL语句未更新数据库内容

    我正在尝试使用准备好的语句来实现更新语句PHP http en wikipedia org wiki PHP脚本 但它似乎没有更新数据库中的记录 我不确定为什么 所以如果您能分享一些见解 我将不胜感激 Code query UPDATE D
  • 通过删除空 GET 变量并简化变量名称来缩短 URL

    我正在开发一个网站 在提交后组成一个 URLGET form 表单值作为一组变量传递 其中必须至少定义一个变量才能在数据库上进行搜索 我想将网址缩短为删除空表单元素并使其更加用户友好简化变量名称 目前 URL 如下所示 只是带有更多变量 我
  • 从图像创建 PDF 时设置文档名称

    我使用以下代码从 jpg 图像创建 pdf im new Imagick im gt readImage image jpg im gt setImageFormat pdf im gt writeImage images pdf imag
  • 使用自定义服务的编译器传递加载 Symfony 的参数

    根据这个问题如何从数据库加载 Symfony 的配置参数 Doctrine https stackoverflow com q 28713495 8945214我有一个类似的问题 我需要动态设置参数 并且我想提供来自另一个自定义服务的数据
  • 在 C# 中使用(IDisposable obj = new ...) 在流中写入代码块(例如 XML)

    我已经开始使用实现 IDisposable 的类通过 using 语句在流中写入块 这有助于保持正确的嵌套并避免丢失或错误放置开始 结束部件 基本上 构造函数写入块的开头 例如打开 XML 标签 Dispose 写入结束 例如关闭 XML
  • 使用 fgetcsv 循环遍历 csv

    我有一个包含 3 列的 csv 文件 电子邮件地址 名 and 姓 我已经到了可以使用以下代码打印数组的阶段 这会打印数组 因此每个字段都在一行中 我希望它打印的只是该行第一列中的值 这是如何完成的 关于 fgetcsv 的文档对我 相对初
  • 在 Python 中按标题将 docx 拆分为单独的文件

    我想编写一个程序来获取我的 docx 文件 迭代它们并根据标题将每个文件拆分为多个单独的文件 每个 docx 中都有几篇文章 每篇文章都有一个 标题 1 及其下方的文本 因此 如果我的原始 file1 docx 有 4 篇文章 我希望将其分
  • Blade @if 中的 Laravel 会话变量

    当我尝试使用 Laravel Session 在刀片中设置 JS 变量来刷新一些数据时 我在 Laravel 4 2 中遇到了一些奇怪的情况 这很简单 我不知道我错过了什么 目标 在用户注册后立即触发 Javascript 网站浏览 方法
  • array_udiff_assoc() 和 array_diff_uassoc() 有什么区别?

    有什么区别array udiff assoc and array diff uassoc For array udiff assoc 我有这个代码 function myfunction v1 v2 if v1 v2 return 0 re
  • 为什么index.html优先于index.php?

    我在服务器上有一个网站 主页是 example com index php 好的 我将一个名为 index html 的文件上传到服务器 根目录 当我在浏览器的 URL 栏中输入站点的域时 我感到惊讶 因为 index html 页面已加载
  • Linq to XML - 更新/更改 XML 文档的节点

    我有 2 个问题 1 我已经开始使用 Linq to XML 我想知道是否可以通过 Linq 更改 XML 文档 我的意思是 有没有类似的东西 XDocument xmlDoc XDocument Load sample xml updat
  • PHP 检查字符串是否只包含任何语言的字母、数字和空格

    我如何检查字符串是否只包含任何语言中的字母 数字和空格 我已经尝试过 但它不检查像 这样的特殊字符 preg match p L u string preg match p N u string 您可以使用 preg match p L p
  • Laravel 集成测试:如何断言一个 URL 已被调用但另一个 URL 没有

    我想测试一个向某个 URL 发出请求的控制器 例如 http example com api say hello 但它不会向另一个 URL 发出请求 例如 http example com api say bye bye 我想测试的控制器功
  • PDO SQLSRV 和 PDO MySQL 在获取 int 或 float 时返回字符串

    当您获取时 PDO MS SQL Server 和 PDO MySQL 都会返回一个字符串数组 即使列的 SQL 类型本应是数字类型 例如 int 或 float 我设法解决了这个问题 但我想了解为什么它们一开始就这样设计 是不是因为PDO
  • Web 服务客户端的 AXIS 与 JAX-WS

    我决定用Java 实现Web 服务客户端 我已经在 Eclipse 中生成了 Axis 客户端 并使用 wsimport 生成了 JAS WS 客户端 两种解决方案都有效 现在我必须选择一种来继续 在选择其中之一之前我应该 考虑什么 JAX
  • 连接两个表的查询的 SQL Server“FOR XML”输出

    我是 SQL Server 中 FOR XML 功能的新手 我正在使用 SQL Server 2012 我有两个表 Word 和 Word Expansion 样本数据 表 字 WordOID Word 1 PIPE 2 WIRE 表 Wo
  • 通过 __get() 通过引用返回 null

    快速规格 PHP 5 3 error reporting 1 the highest 我正在使用 get 通过引用技巧神奇地访问对象中任意深度的数组元素 快速示例 public function get key return isset t
  • facebook php - 如何获取专辑封面照片

    我需要使用 PHP SDK Facebook 获取专辑封面照片 我尝试 https graph facebook com ALBUM ID picture type album 但我得到默认图像 例如 获取用户 https graph fa

随机推荐

  • LEFT JOIN 比 INNER JOIN 快得多

    我有一张桌子 MainTable 有超过 600 000 条记录 它通过第二个表连接到自身 JoinTable 在父 子类型关系中 SELECT Child ID Parent ID FROM MainTable AS Child JOIN
  • Monkeyrunner/jython 中未找到 JDBC 驱动程序错误

    我需要在中插入一些东西DB 我在用着JDBC as a connector jython the script mysql数据库和脚本正在运行CentOS 我的代码看起来像这样 from com android monkeyrunner i
  • 是否可以通过 Android 应用程序来录音?

    我是一名开发人员 希望创建一个 Android 应用程序来记录电话 这是出于我个人的需要 为了我自己的目的和记录而记录电话 是否有可能做到这一点 是否可以访问麦克风以及通过扬声器发出的声音 我对 Android 开发有点陌生 所以请耐心等待
  • 在android中,将相机预览流到视图上

    我想将 Android 相机的相机预览流式传输到视图上 目的是随后使用 onDraw 将各种内容添加到视图中 我不需要随时实际捕捉图像 它不必是最高质量或每秒最大数量的帧 有谁知道如何做到这一点 将其添加到您的 xml 中
  • C# 静态类型不能用作参数

    public static void SendEmail String from String To String Subject String HTML String AttachmentPath null String Attachme
  • Matplotlib:如何有效地将大量线段着色为独立渐变

    Python 绘图库 如何有效地将大量线段着色为独立渐变 已经 阅读this https stackoverflow com questions 8500700 how to plot a gradient color line in ma
  • Series.sort() 和 Series.order() 有什么区别?

    s pd Series nr randint 0 10 5 index nr randint 0 10 5 s Output 1 3 7 6 2 0 9 7 1 6 order 按值排序并返回一个新系列 s order Output 2 0
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • 如何在 Visual Studio 2015 中使用 Angular-Cli 和 ASP.NET Core 设置 asp.net Angular 2 项目?

    我使用 Angular cli 设置了 Angular 2 项目 它非常适合我 有什么方法可以将此项目添加到 Visual Studio 中的 ASP NET Core 中 我会将 Angular 2 项目移动到 ASP NET Core
  • 错误 #520009 - 帐户受到限制

    我收到 520009 错误 帐户 电子邮件受保护 cdn cgi l email protection被限制 当尝试进行并行付款时 我的代码使用沙箱运行良好 但我切换到实时端点 它开始失败 有问题的帐户是有效的 PayPal 帐户 我使用的
  • 如何通过 python 多处理利用所有核心

    我一直在摆弄Python的multiprocessing现在已经使用了一个多小时的功能 尝试使用并行化相当复杂的图形遍历函数multiprocessing Process and multiprocessing Manager import
  • 在 PHP 中将整数转换为十六进制值

    如何将PHP中第一类中的数字转换为第二类中的数字 是否有内置函数来转换数字 也是我的标题 将整数转换为十六进制值 甚至正确 class Permission const READ 1 const UPDATE 2 const DELETE
  • 如何在 Vim 中同时打开多个文件?

    有没有办法从 Vim 中打开目录中的所有文件 所以一个 command这实际上是说 打开下面的所有文件 some path进入缓冲区 理想情况下 递归地打开目录下的所有文件会很棒 您正在寻找的命令是 args 例如 args path to
  • 如何将本地文本文件上传到文本区域(网页内)

    我是一名新手程序员 需要一些帮助来弄清楚如何将本地文本文件上传到我正在构建的网站内的文本区域 我非常精通 HTML CSS 对 Javascript JQuery 有相当的了解 而且我刚刚学习 PHP 您能提供的任何帮助我将不胜感激 我有一
  • 放心 + 模拟 MVC @ControllerAdvice

    在我的项目中 我使用 Rest Assured MockMVC 并具有以下依赖项
  • 如何在 Go 中填写 void* C 指针?

    我正在尝试与 Go 中的一些 C 代码交互 使用 cgo 这一直相对简单 直到我遇到这种 相当常见 的情况 需要将指针传递给本身包含指向某些数据的指针的结构 我似乎无法弄清楚如何从 Go 中做到这一点 而不诉诸于将结构的创建放入 C 代码本
  • ResourceVersion 和 Generation 之间有什么区别?

    在 Kubernetes 对象元数据中 有的概念resourceVersion and generation https github com kubernetes community blob master contributors de
  • 测量数组的“无序”程度

    给定一个值数组 我想找到总 分数 其中每个元素的分数是数组中出现在其之前的具有较小值的元素的数量 e g values 4 1 3 2 5 scores 0 0 1 1 4 total score 6 O n 2 算法很简单 但我怀疑可以通
  • 如何从字符串中提取子字符串直到遇到第二个空格?

    我有一个像这样的字符串 o1 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 如何仅提取 o1 1232 5467 要提取的字符数并不总是相同 因此 我只想提取直到遇到
  • 通过 post 使用 php 发送 XML

    我知道有很多类似的问题 但我尝试过摆弄所有的解决方案 但似乎无法使其发挥作用 我正在尝试将 xml 直接发布到 Web 服务并获得响应 从技术上讲 我正在尝试连接到freightquote com 您可以在右上角找到该文档this http