今天在使用http post(curl)获取一个数据的时候发现了问题,死活拿不到数据。获取永远为空。
场景是这样的:我向微信发起一个请求,QQ请求我的服务器,由我请求接口服务器。返回结果
但问题是,如果由微信直接请求接口服务器。一切正常。反而因为我做了一次中间层后。取不到数据了。
一点一点排查:
1、接口服务器的TransferMode是chunked。OK。我CURL换成1.0请求,结果还是空
2、换file_get_contents。。。一样是空。
3、排查微信请求的头。在我的服务器上把$_SERVER变量打印出来。结果。。意外的发现:Content-Type: text/xml,居然是这个?那我换成这个请求接口服务器试一下呢?居然真的成功了
遇到问题,果然是要一个个的排查啊。对方是java的服务器。可能会httprawbody做了一个强验证。所以。。。不象我们PHP可以拿到数据。先simplexml_load_string,不行?再json_decode,还不行?再用其他处理。。。
ajax post content-type
<html> <head> <script type="text/javascript"> var xmlhttp; function test(url) { var num = document.getElementById("num").value; xmlhttp=null; if (window.XMLHttpRequest) {// code for Firefox, Opera, IE7, etc. xmlhttp=new XMLHttpRequest(); } else if (window.ActiveXObject) {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } if (xmlhttp!=null) { xmlhttp.onreadystatechange=state_Change; xmlhttp.open("POST","b.php",true); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //表单提交必须用application/x-www-form-urlencoded,如果是type = file,则必须用multipart/form-data xmlhttp.send("num=aa"); //当提交方式为get时,不用xmlhttp.setRequestHeader() //xmlhttp.open("GET","b.php?num="+num,true); //xmlhttp.send(null); } else { alert("Your browser does not support XMLHTTP."); } } function state_Change() { if (xmlhttp.readyState==4) {// 4 = "loaded" if (xmlhttp.status==200) {// 200 = "OK" document.getElementById('show').innerHTML=xmlhttp.responseText; } else { alert("Problem retrieving data:" + xmlhttp.statusText); } } } </script> </head> <body onload="test()"> <!--<input type="text" id="num"> <input type="button" onclick="test()" value="submit">--> <div id="show"></div> </body> </html>
b.php
<?php $num = $_REQUEST["num"]; echo $num; ?>
转载请注明:爱开源 » http post : Content-Type