0

PHP CURL から PUT リクエストを発行しています。以下は私の CURL 設定の詳細です。PUT リクエストの動機は、サーバーに XML リクエストを送信することです。サーバーは TOMCAT 7 です。

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_PUT, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_INFILE, $xmlreq);
curl_setopt($ch, CURLOPT_INFILESIZE, 2000);
curl_setopt($ch, CURLOPT_HTTPHEADER,array('Content-type: application/xml', 'Content-length:2000') 
);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');
$data = curl_exec($ch);
echo $data;

しかし、私は何の見返りも得ていません

監視した後、次のエラーが発生していることに気付きましたが、解決方法がわかりません

javax.ws.rs.WebApplicationException: java.lang.IllegalArgumentException: Error parsing media type 'application/xml;charset: utf-8'
    com.sun.jersey.server.impl.model.HttpHelper.clientError(HttpHelper.java:262)
    com.sun.jersey.server.impl.model.HttpHelper.getContentType(HttpHelper.java:88)
    com.sun.jersey.server.impl.model.HttpHelper.getContentType(HttpHelper.java:74)
    com.sun.jersey.spi.container.ContainerRequest.getMediaType(ContainerRequest.java:544)
    com.sun.jersey.spi.container.servlet.WebComponent.filterFormParameters(WebComponent.java:769)
    com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:376)
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:451)
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:632)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

root cause

java.lang.IllegalArgumentException: Error parsing media type 'application/xml;charset: utf-8'
    com.sun.jersey.core.impl.provider.header.MediaTypeProvider.fromString(MediaTypeProvider.java:77)
    com.sun.jersey.core.impl.provider.header.MediaTypeProvider.fromString(MediaTypeProvider.java:50)
    javax.ws.rs.core.MediaType.valueOf(MediaType.java:119)
    com.sun.jersey.server.impl.model.HttpHelper.getContentType(HttpHelper.java:86)
    com.sun.jersey.server.impl.model.HttpHelper.getContentType(HttpHelper.java:74)
    com.sun.jersey.spi.container.ContainerRequest.getMediaType(ContainerRequest.java:544)
    com.sun.jersey.spi.container.servlet.WebComponent.filterFormParameters(WebComponent.java:769)
    com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:376)
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:451)
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:632)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

root cause

java.text.ParseException: Expected separator '=' instead of ':'
    com.sun.jersey.core.header.reader.HttpHeaderReader.nextSeparator(HttpHeaderReader.java:112)
    com.sun.jersey.core.header.reader.HttpHeaderReader.readParameters(HttpHeaderReader.java:244)
    com.sun.jersey.core.impl.provider.header.MediaTypeProvider.valueOf(MediaTypeProvider.java:95)
    com.sun.jersey.core.impl.provider.header.MediaTypeProvider.fromString(MediaTypeProvider.java:75)
    com.sun.jersey.core.impl.provider.header.MediaTypeProvider.fromString(MediaTypeProvider.java:50)
    javax.ws.rs.core.MediaType.valueOf(MediaType.java:119)
    com.sun.jersey.server.impl.model.HttpHelper.getContentType(HttpHelper.java:86)
    com.sun.jersey.server.impl.model.HttpHelper.getContentType(HttpHelper.java:74)
    com.sun.jersey.spi.container.ContainerRequest.getMediaType(ContainerRequest.java:544)
    com.sun.jersey.spi.container.servlet.WebComponent.filterFormParameters(WebComponent.java:769)
    com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:376)
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:451)
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:632)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
4

2 に答える 2

0

この行を設定します

curl_setopt($ch, CURLOPT_HEADER, 0);

この行に

curl_setopt($ch, CURLOPT_HEADER, true);

したがって、応答ヘッダーも取得します。「エラー」に関する詳細情報が表示されます。

于 2011-04-02T06:56:11.943 に答える
0

サーバーはカスタム リクエストをサポートしていないと思います。ただし、POSTでそれを行うことができるはずです。クライアントが送受信できるメッセージを確認するためにスニッフィングを試みましたか?

于 2011-04-02T05:52:49.950 に答える