响应在PHP中为null,while.网络正在提供所有文本
本文关键字:文本 while 中为 PHP null 响应 网络 | 更新日期: 2023-09-27 17:59:56
我在PHP中使用cURL来获取响应中的id,但得到的响应为空。这是我的代码:
$jsonContent = "{'"param1'" : [{'"subparam1'" : subnumval1,'"subparam2'" : subnumval2 },{'"subparam1'" : subnumval1,'"subparam2'" : subnumval2 }],'"param2'" : '"val2'",'"param3'" : '"val3'"}";
$url = HTTPS_URL;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERPWD, "user:pass");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonContent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonContent))
);
$output = curl_exec($ch);
if($output === false)
{
echo 'Curl error: ' . curl_error($ch);
}else
{
echo $output;
}
当我尝试使用获得响应时。NET(C#),我得到了响应,这里是。NET代码:
public partial class PostData : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
PostBlockFaceData();
}
// POST a JSON string
void PostBlockFaceData()
{
//Create the credentials cache as you can more than one
CredentialCache tempCache= new CredentialCache();
//Create the Network username and password
NetworkCredential secureCred = new NetworkCredential("user", "pass");
//Add the login credentials to the credential cache
parkmeCache.Add(new Uri("HTTPS_URL:443/"), "Basic", secureCred);
//JSON array in string format
string jsonContent = "{'"param1'" : [{'"subparam1'" : "subval1",'"subparam2'" : "subval2" },{'"subparam1'" : "subval2",'"subparam2'" : "subparam2" }],'"param2'" : '"val2'",'"param3'" : '"val3'"}";
//
string url = HTTPS_URL
//Create the Webrequest with the URL
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.PreAuthenticate = true; //use authentication
request.UseDefaultCredentials = true; //Use the default credential available
request.Credentials = parkmeCache; //pass the credential cache to the request object
//The following is to used to ignore bit matching
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(
Object sender1,
X509Certificate certificate,
X509Chain chain,
System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
return true;
};
request.Method = "POST"; //HTTP VERB
request.ContentLength = jsonContent.Length; //JSON DATA string length
request.ContentType = @"application/json"; //The Content type is of application in json format
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); //specified UTF8 standard text coding
Byte[] byteArray = encoding.GetBytes(jsonContent); //converted the json data to bytes because datastream understands that way
using (Stream dataStream = request.GetRequestStream()) //get the request stream handle
{
dataStream.Write(byteArray, 0, byteArray.Length); //write the json data to the request stream
}
long length = 0;
string strStatusCode="";
string strDesc = "";
try
{
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) //execute the request and get the response from the call
{
length = response.ContentLength; //length of the content
strStatusCode = response.StatusCode.ToString(); //return the status code OK on success or status error codes like 400, 403 etc.,
strDesc = response.StatusDescription; //The description has the return value in this case on success returns the Block Face ID
Response.Write("Status Code : " + strStatusCode + " , Status Description : " + strDesc);
}
}
catch (WebException ex)
{
Response.Write(ex.Message);
// Log exception and throw as for GET example above
}
}
}
上面的代码运行得很有魅力。。我不知道PHP的问题在哪里。有人能帮我吗?
$jsonContent="{''"param1''":[{''"subparam1''":"subval1",''"subram2''":"subval2"},{''‘subram1''’:"subval 2",''‘subparam2''’:"subram2"}],''‘param2''‘:"val2''",''"param3''":"val3''"}";
至
$jsonContent="{''"param1''":[{''"subparam1''":''"subval1''",''"subram2''":"subval2''"},{''《subram1''》:''"subval2''",''"subram2''":''"subparam2''"}],''"param2''";
你没有逃脱所有的双引号。
首先,我要感谢所有回复我并试图解决我问题的人。经过大量挖掘和检查代码后,我注意到了问题所在。
我所需要做的就是像下面的代码一样传递标题
curl_setopt($ch,CURLOPT_HEADER,1)
在这里,我把正确的代码放在下面。
$jsonContent = "{'"param1'" : [{'"subparam1'" : subnumval1,'"subparam2'" : subnumval2 },{'"subparam1'" : subnumval1,'"subparam2'" : subnumval2 }],'"param2'" : '"val2'",'"param3'" : '"val3'"}";
$url = HTTPS_URL;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERPWD, "user:pass");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonContent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonContent))
);
$output = curl_exec($ch);
if($output === false)
{
echo 'Curl error: ' . curl_error($ch);
}else
{
echo $output;
}
我希望它能帮助其他面临同样问题的人。
再次感谢:)