1

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のどこに問題があるのか​​わかりません。誰か助けてもらえますか?

4

2 に答える 2

0

$ jsonContent = "{\" param1 \ ":[{\" subparam1 \ ":" subval1 "、\" subparam2 \ ":" subval2 "}、{\" subparam1 \ ":" subval2 "、\" subparam2 \ " :"subparam2"}]、\ "param2 \":\ "val2 \"、\ "param3 \":\ "val3 \"} ";

$ jsonContent = "{\" param1 \ ":[{\" subparam1 \ ":\" subval1 \ "、\" subparam2 \ ":\" subval2 \ "}、{\" subparam1 \ ":\" subval2 \ " 、\ "subparam2 \":\ "subparam2 \"}]、\ "param2 \":\ "val2 \"、\ "param3 \":\ "val3 \"} ";

すべての二重引用符をエスケープしていません。

于 2013-02-19T07:43:05.370 に答える
0

まず第一に、私に応答し、私の問題を理解しようとしたすべての人に感謝したいと思います。多くを掘り下げてコードをチェックした後、私は何が問題であるかに気づきました。

私がする必要があるのは、以下のコードのようにヘッダーを渡すことだけです

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;
    }

同じ問題に直面している/直面する他の人に役立つことを願っています。

再度、感謝します :)

于 2013-02-19T08:30:08.853 に答える