cURL通过命令行工作,但不适用于PHP Curl [英] cURL works via command line but not in PHP Curl

查看:107
本文介绍了cURL通过命令行工作,但不适用于PHP Curl的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下命令在命令行中可以完美运行:

The following command works perfect in the command line:

c:\>curl -v -H "Content-Type: text/xml" -d "<?xml version='1.0' encoding='utf-8'?><methodCall><methodName>create_account</methodName><params><param><value><struct><member><name>user</name><value><string>test</string></value></member><member><name>server</name><value><string>chat3.activengage.com</string></value></member><member><name>password</name><value><string>test</string></value></member></struct></value></param></params></methodCall>" http://localhost:4561
* About to connect() to localhost port 4561 (#0)
*   Trying 127.0.0.1...
* connected
* Connected to localhost (127.0.0.1) port 4561 (#0)
> POST / HTTP/1.1
> User-Agent: curl/7.26.0
> Host: localhost:4561
> Accept: */*
> Content-Type: text/xml
> Content-Length: 428
>
* upload completely sent off: 428 out of 428 bytes
< HTTP/1.1 200 OK
< Content-Length: 113
< Server: Erlang/Process-One
< Connection: close
<
<?xml version="1.0"?><methodResponse><params><param><value><int>0</int></value><
/param></params></methodResponse>* Closing connection #0

然后在PHP中使用以下代码:

And in PHP using the code below:

public /*string*/ function registerUser(/*string*/$user,/*string*/$pass){
        $xml = "<?xml version='1.0' encoding='utf-8'?><methodCall><methodName>create_account</methodName><params><param><value><struct><member><name>user</name><value><string>test2</string></value></member><member><name>server</name><value><string>chat3.activengage.com</string></value></member><member><name>password</name><value><string>test</string></value></member></struct></value></param></params></methodCall>";
        $handle = curl_init();
        curl_setopt($handle, CURLOPT_URL, 'http://127.0.0.1:4561');
        curl_setopt($handle, CURLOPT_VERBOSE, 1);
            curl_setopt($handle, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
        curl_setopt($handle, CURLOPT_POST, 1);
        curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($handle, CURLOPT_POSTFIELDS, $xml);
        $content = curl_exec($handle);
        echo $xml;
        $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
        print_r($httpCode);
        print_r($content);
        if(curl_errno($handle))
        {
         echo 'error:' . curl_error($handle);
        }
        curl_close($handle);
}

结果是HTTP状态码400。我在做什么吗

The result is a HTTP Status code 400. Is there something I'm doing wrong?

更新-CURLINFO_HEADER_OUT的结果

string(99) "POST / HTTP/1.1
Host: localhost:4561
Accept: */*
Content-Type: text/xml
Content-Length: 400

"


推荐答案

在破坏了etc / resolv.conf文件后,从基于浏览器的PHP脚本运行curl请求失败。

Running a curl request from my browser based PHP script failed after I broke my etc/resolv.conf file.

我在访问后发现了这一点

I discovered this after visiting

php5-curl错误:无法解析主机

按如下所示修复resolve.conf文件后:
(注意:192.168.1.1是我的路由器地址)

After fixing the resolve.conf file as follows: (note: 192.168.1.1 is my router address)

# Generated by NetworkManager
nameserver 192.168.1.1

卷曲的行为符合预期。

希望对您有帮助

这篇关于cURL通过命令行工作,但不适用于PHP Curl的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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