PHP cURL Content-Type未设置 [英] PHP cURL Content-Type is not set

查看:277
本文介绍了PHP cURL Content-Type未设置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个简单的Web服务,我想与之连接。为了发布一些 XML ,这将在Web服务端正确进行,我需要准备一个正确的请求。我使用 cURL 这样:

I have a simple web service that I would like to connect with. In order to post some XML, which will be properly proceeded on the web service side, I need to prepare a proper request. I am using cURL for this like that:

try {
    $ch = curl_init();

    if (FALSE === $ch)
        throw new Exception('failed to initialize');

    curl_setopt($ch, CURLOPT_URL,"192.168.1.37");
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                                            'Content-Type: application/xml',
                                            'Connection: Keep-Alive'
                                            ));
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
    curl_setopt($ch, CURLOPT_PROXY, '');
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);
    curl_setopt($ch, CURLOPT_HTTPHEADER,array("Expect:  "));
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$xml);


    $request=  curl_getinfo($ch);
    var_dump($request);


    $content = curl_exec($ch);


    if (FALSE === $content)
        throw new Exception(curl_error($ch), curl_errno($ch));



} catch(Exception $e) {

    trigger_error(sprintf(
        'Curl failed with error #%d: %s',
        $e->getCode(), $e->getMessage()),E_USER_ERROR);

}

一切都应该好。首先显示 curl_getinfo($ ch); 的请求正文,然后显示 $ content

Everything should be ok. First I am displaying the request body from curl_getinfo($ch); and then i am showing the response from $content variable.

只有发送到服务器的请求的限制是 Content-Type code> application / xml 否则服务器会回应一个错误(这不是我的想法,我不能做任何事情)

Only restriction for request to be sent to the server is Content-Type header - it MUST be application/xml otherwise server will respond with an error ( It is not my idea and I can't do anything about it)

这里是输出请求:

array(21){[url] => string(68)192.168.1.37[content_type] => NULL [http_code] => int(0)[header_size] => int(0)[request_size] => int(0)[filetime] => int(0)[ssl_verify_result] => int(0)[redirect_count] => int(0)[total_time] => float(0)[namelookup_time] => float(0)[connect_time] => float(0)[pretransfer_time] => float(0)[size_upload] => float(0)[size_download] => float(0)[speed_download] => float(0)[speed_upload] => float(0)[download_content_length] => float(-1)[upload_content_length] => float(-1)[starttransfer_time] => float(0)[redirect_time] => float(0)[certinfo] =>数组(0){}}

,响应为 HTTP 400错误请求

我能看到的是 [content_type] => NULL 但是我在我的PHP代码中设置这个变量...

What I can see from that is ["content_type"]=> NULL but I set this variable in my PHP code...

任何人都可以告诉我我失踪了什么?

Can anyone tell me what I am missing?

推荐答案

您正在设置HTTP_HEADER两次:

You are setting HTTP_HEADER twice:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                                            'Content-Type: application/xml',
                                            'Connection: Keep-Alive'
                                            ));

curl_setopt($ch, CURLOPT_HTTPHEADER,array("Expect:  "));

我想这是问题。第二次设置时,您将删除第一个设置。

I guess that is the problem. The second time you set it, you delete the first setting.

这篇关于PHP cURL Content-Type未设置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆