【问题标题】:Execute curl using php使用php执行curl
【发布时间】:2012-01-08 09:15:04
【问题描述】:

我可以像这样使用java调用soap服务器

        Call call = new Call();
        URL url = new URL("http://soap-something.dash.com/servlet/rpcrouter");
        call.setTargetObjectURI("urn:login-transport");
        call.setMethodName("confirmPassword");
        call.setParams(a vector);
        resp = call.invoke(url, "");

但我的问题是如何使用 curl 和 php 调用相同的函数,我已经尝试过,但它可能是某种有趣的代码

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://soap-something.dash.com/servlet/rpcrouter?urn:login-transport");
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_HEADERFUNCTION, "confirmPassword");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, array("username"=>"pritom", "password"=>"pritom"));
    $head = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    echo "<br/>HTTP CODE: " . $httpCode;
    print_r($head);

但它回显 http 代码 100,我没有从肥皂服务器找到任何结果。但是我的soap服务器没问题,通过java测试。

【问题讨论】:

  • 你还没说是什么问题。
  • 嗯,你现在可以看到我的问题了。

标签: php soap curl soapserver


【解决方案1】:

对我来说看起来不错,除了 CURLOPT_HEADER 需要为 true 或 false(在输出中是否包含 HTTP 标头),

curl_setopt($ch, CURLOPT_HEADER, "confirmPassword");

应该是

curl_setopt($ch, CURLOPT_HEADER, true);

我只能猜测 confirmPassword 是什么,如果是回调,你应该使用 CURLOPT_HEADERFUNCTION 代替。

但正如 Ariel 指出的那样,您并没有告诉我们问题出在哪里。

【讨论】:

  • urn:login-transportconfirmPassword 是被调用的函数。
  • 如果您只想使用 SOAP,我建议您改用 PHP SOAP 函数,SoapClient
【解决方案2】:

尝试删除此行:

curl_setopt($ch, CURLOPT_NOBODY, false); // remove body

然后发布输出是什么。

【讨论】:

  • 删除该行后结果相同。获取 http 代码 100,仅此而已。
  • @Pritom http code 100 表示服务器正在等待请求的正文。这是一个非常不寻常的 http 代码,但也许 soap 使用它。你能验证 url 表单 PHP 与你的 java 代码中的 URL 完全相同吗?检查实际的soap服务器日志,而不仅仅是你的源代码。
  • @Pritom 也尝试将 CURLOPT_HEADER 设置为 false,看看它的作用。
猜你喜欢
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
相关资源
最近更新 更多