Запустить PUT запрос с использованием CURL в PHP - PullRequest
0 голосов
/ 02 апреля 2011

Я запускаю запрос PUT от PHP CURL. Ниже приведены мои данные конфигурации 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)

Ответы [ 2 ]

0 голосов
/ 02 апреля 2011

Установить эту строку

curl_setopt($ch, CURLOPT_HEADER, 0);

к этой строке

curl_setopt($ch, CURLOPT_HEADER, true);

Таким образом, вы также получите заголовок ответа. Там вы получите больше информации об «ошибке»

0 голосов
/ 02 апреля 2011

Я бы сказал, что сервер не поддерживает пользовательские запросы. Вы должны быть в состоянии сделать это с помощью POST, хотя. Вы пытались проверить, какие сообщения может получать и отправлять клиент?

...