Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
curl脚本在命令行上工作,但java返回;不能';t连接到主机“;_Java_Bash_Curl - Fatal编程技术网

curl脚本在命令行上工作,但java返回;不能';t连接到主机“;

curl脚本在命令行上工作,但java返回;不能';t连接到主机“;,java,bash,curl,Java,Bash,Curl,我在shell脚本curlerWS.sh中使用curl调用来连接SOAP、REST和RESTful web服务。我目前遇到的问题是SOAP调用,特别是从java调用脚本时连接到Sharepoint端点 当从子shell(另一个shell脚本)调用时,curlerWS.sh按预期工作。它从sharepoint返回预期的XML响应 它调用的curl命令也在主shell中交互工作 但是,当我使用相同的参数从java类(与前面提到的shell调用在同一服务器上的Tomcat中运行)调用curlerWS.

我在shell脚本
curlerWS.sh
中使用
curl
调用来连接SOAP、REST和RESTful web服务。我目前遇到的问题是SOAP调用,特别是从java调用脚本时连接到Sharepoint端点

当从子shell(另一个shell脚本)调用时,
curlerWS.sh
按预期工作。它从sharepoint返回预期的XML响应

它调用的
curl
命令也在主shell中交互工作

但是,当我使用相同的参数从java类(与前面提到的shell调用在同一服务器上的Tomcat中运行)调用
curlerWS.sh
时,curl返回
curl:(7)无法连接到主机

此调用在过去与其他sharepoint终结点一起使用过,这些终结点当前已停止维护

我想我已经排除了代理的可能性。当我在
ProcessBuilder
中显式设置代理时,我从代理服务器得到一个错误,指的是错误地使用它来访问内部站点

脚本中的
curlerWS.sh
调用:

curlerWS.sh -X -s https://host.domain/sites/site/subsite/_vti_bin/Lists.asmx \
-f "studies.xml" \
-u "domain\user" \
-p pass \
-a ntlm \
-q '<GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/"><listName>{FAC53F9A-F7DC-4511-A675-F23B479C87CB}</listName><viewName></viewName><query></query><viewFields></viewFields><rowLimit>0</rowLimit><queryOptions><QueryOptions></QueryOptions></queryOptions></GetListItems>' \
-t http://schemas.microsoft.com/sharepoint/soap/GetListItems
命令行上的
curl
调用:

curl -s -v --show-error -k --ntlm -A "basic" -u "domain\user:pass" -o studies.xml -H "Content-Type: text/xml; charset=utf-8" -H "SOAPAction: http://schemas.microsoft.com/sharepoint/soap/GetListItems" -d '<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/"><listName>{FAC53F9A-F7DC-4511-A675-F23B479C87CB}</listName><viewName></viewName><query></query><viewFields></viewFields><rowLimit>0</rowLimit><queryOptions><QueryOptions></QueryOptions></queryOptions></GetListItems></soapenv:Body></soapenv:Envelope>' "https://host.domain/sites/site/subsite/_vti_bin/Lists.asmx"
日志中报告的java
args
数组值(第一次调用
l.debug

通过脚本执行soap请求:[/apps/bioinfo/dev/bin//curlerWS.sh,-X,-s,http://host.domain/sites/site/subsite/_vti_bin/Lists.asmx,-u,域\用户,-p,通过,-a,ntlm,-q,{FAC53F9A-F7DC-4511-A675-F23B479C87CB}10000,-t,http://schemas.microsoft.com/sharepoint/soap/GetListItems]

在对配置进行了多次迭代更改之后,答案是我的java代码有几处做错了。很遗憾,我也是

首先,SOAP请求的不同执行方法实际上配置不完全相同。也就是说:

shell和subshell版本是相同的

然而,一开始,java版本包含一个稍微修改过的soapBody版本。 正确的标记:

<GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'><listName>{FAC53F9A-F7DC-4511-A675-F23B479C87CB}</listName><viewName></viewName><query></query><viewFields></viewFields><rowLimit>10</rowLimit><queryOptions><QueryOptions></QueryOptions></queryOptions></GetListItems>
{FAC53F9A-F7DC-4511-A675-F23B479C87CB}10
原始标记:

<GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'><listName>{FAC53F9A-F7DC-4511-A675-F23B479C87CB}</listName><rowLimit>10</rowLimit></GetListItems>
{FAC53F9A-F7DC-4511-A675-F23B479C87CB}10
在各种sharepoint版本中排除
视图字段
查询选项时,我经历了不同的结果。在这种情况下,包括他们,即使是空的,似乎是必要的。排除它们将返回一个sharepoint错误,该错误引用了
意外值
或类似值。然而,由于其他错误,当我注意到差异时,我甚至还没有达到这一点

接下来,我注意到,在检查shell调用的跟踪输出时,Web服务器地址指的是端口
443
。通过在java调用中从主机配置中排除端口,java默认为端口
80
,这是
http
协议无法访问的

在纠正端口配置错误后,通过显式地将其设置为
443
,curl响应不再失败,而是返回一个空响应

这是因为安全
https
协议指定被重写为不安全。具体来说,
https
在java调用中恢复为
http

对java代码进行重构以保留
https
是最终的解决方案。我还可以省略显式端口配置,因为使用
https
,服务器会从端口80重定向到443

谢谢你的意见和评论

“无法连接到主机”听起来像是网络问题。您可以从Java内部执行其他网络操作吗?尝试ping此主机或类似8.8.8.8的IP地址。
Executing soap request via script: [/apps/bioinfo/dev/bin//curlerWS.sh, -X, -s, http://host.domain/sites/site/subsite/_vti_bin/Lists.asmx, -u, domain\user, -p, pass, -a, ntlm, -q, <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'><listName>{FAC53F9A-F7DC-4511-A675-F23B479C87CB}</listName><rowLimit>10000</rowLimit></GetListItems>, -t, http://schemas.microsoft.com/sharepoint/soap/GetListItems]
<GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'><listName>{FAC53F9A-F7DC-4511-A675-F23B479C87CB}</listName><viewName></viewName><query></query><viewFields></viewFields><rowLimit>10</rowLimit><queryOptions><QueryOptions></QueryOptions></queryOptions></GetListItems>
<GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'><listName>{FAC53F9A-F7DC-4511-A675-F23B479C87CB}</listName><rowLimit>10</rowLimit></GetListItems>