php编程中经常会用到用xml格式传送数据,如调用微信等第三方接口经常用到,这里演示下php以curl形式发送xml,并通过服务器接收

一、发送xml数据 —— postXml.php

<?php

// 首先检测是否支持curl

if (!extension_loaded("curl")) {

trigger_error("对不起,请开启curl功能模块!", E_USER_ERROR);

} // 构造xml数据

$xmlData = "

<xml>

<AppId>wxf8b4f85f3a794e77</AppId>

<ErrorType>1001</ErrorType>

<Description>错误描述</Description>

<AlarmContent>transaction_id=33534453534</AlarmContent>

<TimeStamp>1393860740</TimeStamp>

<AppSignature>f8164781a303f4d5a944a2dfc68411a8c7e4fbea</AppSignature>

<SignMethod>sha1</SignMethod>

</xml>"; $url = 'http://web.whm.com/getXml.php'; //接收xml数据的文件

$ch = curl_init(); // 初始一个curl会话

$timeout = 30; // php运行超时时间,单位秒

curl_setopt($ch, CURLOPT_URL, $url); // 设置url

curl_setopt($ch, CURLOPT_POST, 1); // post 请求

curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type:text/xml; charset=utf-8")); // 一定要定义content-type为xml,要不然默认是text/html!

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);

curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlData);//post提交的数据包

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); // PHP脚本在成功连接服务器前等待多久,单位秒

curl_setopt($ch, CURLOPT_HEADER, 0);

$result = curl_exec($ch); // 抓取URL并把它传递给浏览器

// 是否报错

if(curl_errno($ch))

{

print curl_error($ch);

}

curl_close($ch); // //关闭cURL资源,并且释放系统资源 echo $result;

php通过curl发送XML数据,并获取XML数据

二、接收xml数据——getXml.php

<?php

//接收传送的数据

$xml = file_get_contents("php://input"); //将xml数据写入文本文件"whm.txt"中

$handle =fopen('whm.txt','w'); fwrite($handle,$xml);

php通过curl发送XML数据,并获取XML数据

三、注意事项

  1. 构造xml时一定要注意格式正确,不能有空格等
  2. 一定要定义content-type为xml,要不然默认是text/html

转载请标明原文链接: https://www.jianshu.com/p/7b86546f5300

更多精彩请访问个人博客:https://www.whmblog.cn/

      </div>

php通过curl发送XML数据,并获取XML数据的更多相关文章

  1. 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用

    [源码下载] 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用 作者:weba ...

  2. XML(php中获取xml文件的方式/ajax获取xml格式的响应数据的方式)

    1.XML 格式规范: ① 必须有一个根元素 ② 不可有空格.不可以数字或.开头.大小写敏感 ③ 不可交叉嵌套 ④ 属性双引号(浏览器自动修正成双引号了) ⑤ 特殊符号要使用实体 ⑥ 注释和HTML一 ...

  3. 基于NIO的同步非阻塞编程完整案例,客户端发送请求,服务端获取数据并返回给客户端数据,客户端获取返回数据

    这块还是挺复杂的,挺难理解,但是多练几遍,多看看研究研究其实也就那样,就是一个Selector轮询的过程,这里想要双向通信,客户端和服务端都需要一个Selector,并一直轮询, 直接贴代码: Ser ...

  4. volley post非json格式数据并获取json数据

    在使用JsonObjectRequest时无法post非json格式的数据,因而采用StringRequest获取到相应的数据后再转为json格式的数据. //这里的上下文需要讨论 private s ...

  5. 小程序 picker 多列选择器 数据动态获取

    需求是将各校区对应各班级的数据 以两列选择器的方式展示出来,并且可以在选择完成之后记录选结果参数. 校区数据 和 班级数据 分别是两个接口,以 校区 teach_area_id 字段关联 其各班级数据 ...

  6. 微信获取用户数据后台写法,author2.0认证

    /* 微信授权接口 */ //1.设置路由 router.get('/wechat/userinfo', function(req, res) { var cb = req.query.cb; //设 ...

  7. LayUI之table数据表格获取行、行高亮等相关操作

    前言 目前LayUI数据表格既美观有不乏一些实用功能.基本上表格应有的操作已经具备,LayUI作者[贤心]肯定是煞费苦心去优化,此处致敬.但是实话实话,如果单纯那数据表格功能来说,EasUI的数据表格 ...

  8. JqGrid 获取所有数据

    jqGrid使用本地数据时,当jqGrid配置的rowNum小于本地总数据量(records属性记录总数据,可以通过records获取到本地总数据量),调用getRowData方法获取到的只是显示的部 ...

  9. curl如何发送json数据?如何发送form数据?python的restfull又该如何获取这些数据?

    1.python使用flask+flask_restfull框架写的api接口,做为服务 2.curl 做为客户端发送数据 from flask import request curl发送json的方 ...

随机推荐

  1. git 执行 git reset HEAD 报 Unstaged changes after reset

    Unstaged changes after reset 解决的办法如下2中办法: 1. git add . git reset --hard   2. git stash git stash dro ...

  2. 使用Rome读取RSS报错,org.xml.sax.SAXParseException: 前言中不允许有内容。

    这是我遇到过的最奇葩的错误 new URL的时候,使用静态变量就会报错org.xml.sax.SAXParseException: 前言中不允许有内容. URL url = new URL(Strin ...

  3. NIO通信中connect()方法和finishConnect()方法的区别

    1.对于阻塞模式下,调用connect()进行连接操作时,会一直阻塞到连接建立完成(无连接异常的情况下).所以可以不用finishConnect来确认. 2.但在非阻塞模式下,connect()操作是 ...

  4. 650. Find Leaves of Binary Tree

    class Solution { public: vector<vector<int>> findLeaves(TreeNode* root) { vector<vect ...

  5. SpringBoot入门-多环境文件配置(二)

    pom.xml <name>springboot-application</name> <description>A project for Spring Boot ...

  6. 初识内存挂:VirtualNES金手指教程

    一.什么VirtualNES?什么是金手指? VirtualNES是一个NES模拟器,用来运行.nes文件,即在电脑上玩当年小霸王游戏机上的游戏.而它内置了一个简单的Cheat Engine,称之为金 ...

  7. 【记录】【springboot】动态定时任务ScheduledFuture,可添加、修改、删除

    这里只演示添加和删除任务的,因为修改就是删除任务再添加而已. 方便演示,任务就是每3秒打印 1.没有任务 后台 2.添加一个任务 3.再添加一个任务 4.删除一个任务 5.再添加一个任务 6.代码 运 ...

  8. ThinkPHP3开发模式,控制器操作,配置文件,框架语法

    ThinkPHP的开发模式 tp框架有两种使用模式:开发模式(调试模式),一种是生产模式(运行模式) define('APP_DEBUG', true);  //调试模式 define('APP_DE ...

  9. Ubuntu16.04环境下的硬盘挂载

    需求:在Ubuntu16.04系统下,挂载一个新的硬盘 第一步:查看目前已经存在的分区的状态 命令:df -l 如上图所示,并未看到要挂载的硬盘(sda)的状态. 第二步:查看计算机硬盘的状态(包括格 ...

  10. 【手写代码】快速计算数字x有多少个二进制1

    #include<bits/stdc++.h> #include<vector> using namespace std; int f1(int x) { ; ) { )==) ...