【问题标题】:Getting org.apache.http.client.ClientProtocolException while calling AlchemyAPI调用 AlchemyAPI 时获取 org.apache.http.client.ClientProtocolException
【发布时间】:2015-02-19 22:31:42
【问题描述】:

我在使用 Apache HttpClient 为 TextGetTargetedSentiment 调用 AlchemyAPI 时收到 org.apache.http.client.ClientProtocolException

org.apache.http.ProtocolException: 服务器未能响应有效的 HTTP 响应

下面是代码sn-p。

URI uri = new URIBuilder()
    .setScheme("http")
    .setHost("access.alchemyapi.com/calls/text/TextGetTargetedSentiment")
    .setParameter("apikey", <api-key>)
    .setParameter("outputMode", "json")
    .setParameter("showSourceText", "0")
    .setParameter("target", <target>)
    .setParameter("text", <news article>)
    .build();

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(uri);

// add header
post.setHeader("User-Agent", <user agent>);
post.setHeader("Content-Type", "application/x-www-form-urlencoded");

HttpResponse response = client.execute(post);

感谢您的帮助。

【问题讨论】:

  • 如果有异常消息或堆栈跟踪,您应该包含它(至少在异常源行中)
  • @fejese 我只能看到原因 - org.apache.http.ProtocolException: The server failed to respond with a valid HTTP response

标签: java apache apache-httpclient-4.x alchemyapi


【解决方案1】:

我怀疑您用于目标和文本的值可能有些奇怪,这可能会搞砸事情。如果此示例没有说明问题,您应该发送电子邮件至 questions@alchemyapi.com 以获得进一步的支持。 以下对我有用:

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

public class Main {

 public static void main(String[] args) {
 try
 {
 HttpClient client = new DefaultHttpClient();

 String text = "Text analytics is fun with AlchemyAPI.";

 String API_KEY = ""; // Add your API key here

 URI uri = new URIBuilder()
 .setScheme("http")
 .setHost("access.alchemyapi.com/calls/text/TextGetTargetedSentiment")
 .setParameter("apikey", API_KEY)
 .setParameter("outputMode", "json")
 .setParameter("showSourceText", "1")
 .setParameter("target", "Text analytics")
 .setParameter("text", text)
 .build();

 HttpPost post = new HttpPost(uri);
 //the following headers aren't necessary for getting a response
 post.setHeader("User-Agent", "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0");
 post.setHeader("Content-Type", "application/x-www-form-urlencoded");

 System.out.println( "executing request " + post.getRequestLine());


 HttpResponse response = client.execute(post);
 String xmlString = EntityUtils.toString(response.getEntity());

 System.out.println(xmlString);
 } catch (UnsupportedEncodingException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (ClientProtocolException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (URISyntaxException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
 }
}

【讨论】:

  • 感谢您的回复。我尝试在 List 中设置属性,而不是使用 URI 设置它。它奏效了。
【解决方案2】:

我有类似的问题,在我的情况下是防火墙问题;它关闭了连接,因为它理所当然地发现它可疑。尝试关闭防火墙。

【讨论】:

    猜你喜欢
    • 2016-08-13
    • 1970-01-01
    • 2016-09-23
    • 2013-03-20
    • 1970-01-01
    • 2011-08-30
    • 2012-01-10
    • 2012-07-19
    • 2023-03-29
    相关资源
    最近更新 更多