Tag: apache commons httpclient

使用HttpClient将照片上传到Facebook

我正在尝试使用以下代码使用Graph API将照片上传到Facebook。 我一直收到“错误请求”,但不确定原因。 我可以使用相同参数的curl上传照片。 我正在使用Java和HttpClient。 PostMethod filePost = new PostMethod(‘https://graph.facebook.com/me/photos’); filePost.setParameter(‘access_token’, ‘my-access-token’) filePost.setParameter(‘message’, ‘test image’) filePost.getParams().setBooleanParameter(HttpMethodParams.USE_EXPECT_CONTINUE, false); try { println(“Uploading ” + file.getName() + ” to ‘https://graph.facebook.com/me/photos'”); Part[] parts = [new FilePart(‘source’, file.getName(), file)] filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams())); HttpClient client = new HttpClient(); client.getHttpConnectionManager().getParams().setConnectionTimeout(5000); int status = client.executeMethod(filePost); if (status == HttpStatus.SC_OK) { println( “Upload complete, […]

混淆了在HttpClient中创建cookie的不同方法

在HttpClient中创建cookie有不同的方法,我很困惑哪一个是最好的。 我需要创建,检索和修改cookie。 例如,我可以使用以下代码查看cookie列表并修改它们但是如何创建它们? 这是检索它们的正确方法吗? 我需要它们在所有类中都可访问。 另外我发现的方法通常需要httpresponse,httprequest对象将cookie发送到浏览器,但如果我不想使用它们怎么样? 码 import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.HttpState; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.GetMethod; public class GetCookiePrintAndSetValue { public static void main(String args[]) throws Exception { HttpClient client = new HttpClient(); client.getParams().setParameter(“http.useragent”, “My Browser”); GetMethod method = new GetMethod(“http://localhost:8080/”); try{ client.executeMethod(method); Cookie[] cookies = client.getState().getCookies(); for (int i = 0; i < cookies.length; i++) […]

使用HTTP客户端的Kerberos连接

我正在使用Kerberos身份validation编写HTTP连接。 我有“HTTP / 1.1 401 Unauthorized”。 你能告诉我应该检查什么吗? 我认为有一些想法,但我没有看到它。 可能我应该用“Negotiate”设置标题“WWW-Authenticate”? 非常感谢您提供任何帮助和想法。 public class ClientKerberosAuthentication { public static void main(String[] args) throws Exception { System.setProperty(“java.security.auth.login.config”, “login.conf”); System.setProperty(“java.security.krb5.conf”, “krb5.conf”); System.setProperty(“sun.security.krb5.debug”, “true”); System.setProperty(“javax.security.auth.useSubjectCredsOnly”,”false”); DefaultHttpClient httpclient = new DefaultHttpClient(); try { NegotiateSchemeFactory nsf = new NegotiateSchemeFactory(); httpclient.getAuthSchemes().register(AuthPolicy.SPNEGO, nsf); List authpref = new ArrayList(); authpref.add(AuthPolicy.BASIC); authpref.add(AuthPolicy.SPNEGO); httpclient.getParams().setParameter(AuthPNames.PROXY_AUTH_PREF, authpref); httpclient.getCredentialsProvider().setCredentials( new AuthScope(null, […]

是否可以使用HttpClient下载PDF等文件?

我在这里找到了一些关于如何下载文件的例子,但其中大多数似乎都在使用HttpURLConnection。 是否可以使用HttpClient下载文件?

使用HttpClient 3.1设置响应编码

我正在使用org.apache.commons.httpclient.HttpClient并需要设置响应编码(由于某种原因,服务器在Content-Type中返回错误的编码)。 我的方法是将响应作为原始字节并转换为具有所需编码的String 。 我想知道是否有更好的方法来做到这一点(例如,设置HttpClient)。 谢谢你的建议。

如何配置HTTPClient以对SOCKS代理进行身份validation?

我需要针对SOCKS代理设置代理身份validation。 我发现这篇文章给出的说明似乎与常见的HTTP代理一起使用。 httpclient.getHostConfiguration().setProxy(“proxyserver.example.com”, 8080); HttpState state = new HttpState(); state.setProxyCredentials(new AuthScope(“proxyserver.example.com”, 8080), new UsernamePasswordCredentials(“username”, “password”)); httpclient.setState(state); 这也适用于SOCKS代理,还是我必须做一些不同的事情?

使用Apache的HTTP客户端时,将HTTP响应作为String的推荐方法是什么?

我刚刚开始使用Apache的HTTP客户端库,并注意到没有内置的方法将HTTP响应作为String获取。 我只是想像String那样得到它,以便我可以将它传递给我正在使用的任何解析库。 将HTTP响应作为String获取的推荐方法是什么? 这是我提出请求的代码: public String doGet(String strUrl, List lstParams) { String strResponse = null; try { HttpGet htpGet = new HttpGet(strUrl); htpGet.setEntity(new UrlEncodedFormEntity(lstParams)); DefaultHttpClient dhcClient = new DefaultHttpClient(); PersistentCookieStore pscStore = new PersistentCookieStore(this); dhcClient.setCookieStore(pscStore); HttpResponse resResponse = dhcClient.execute(htpGet); //strResponse = getResponse(resResponse); } catch (ClientProtocolException e) { throw e; } catch (IOException e) { throw […]

如何从apache httpclient 4中禁用默认请求标头?

我使用apache常见的httpclient 4.3.3来发出http 1.0请求。 以下是我提出请求的方式 HttpClient client = HttpClientBuilder.create().build(); HttpPost post = new HttpPost(url); post.setProtocolVersion(new ProtocolVersion(“HTTP”, 1, 0)); // trying to remove default headers but it doesn’t work post.removeHeaders(“User-Agent”); post.removeHeaders(“Accept-Encoding”); post.removeHeaders(“Connection”); post.setEntity(new ByteArrayEntity(ba) ); HttpResponse response = client.execute(post); 但是,我可以看到有其他标头自动添加到我的服务器请求中 Connection: Keep-Alive User-Agent: Apache-HttpClient/4.3.3 (java 1.5) Accept-Encoding: gzip,deflate 如何告诉httpclient不要包含任何其他标头? 我试图用post.removeHeaders(xxxx)删除那些标题,但它不起作用。 你能告诉我怎么样吗? 谢谢,

在不更改代码的情况下,如何强制httpClient通过环境变量或JVM参数使用代理

我发现设置http.proxyHost和http.proxyPort对httpClient没用。 如何强制httpClient通过环境变量或VM参数或类似的东西使用代理而不更改代码?

使用Apache HttpClient如何在请求和响应上设置TIMEOUT

我需要为我们对服务(而不是Web服务)发出的Http请求设置时间。 我们正在使用Apache HTTP Client。 我添加了这两行代码来设置请​​求和响应服务的超时时间。 HttpConnectionParams.setConnectionTimeout(params, 10000); HttpConnectionParams.setSoTimeout(params, 10000); 1)目前我已将10秒设置为超时,因为我几乎立即看到来自服务的响应。 我应该增加还是减少时间? 2)当响应时间超过10秒时会发生什么? 它会抛出exception,会有什么exception吗? 在下面的代码中,我还需要添加任何其他内容来设置超时。 public HashMap getJSONData(String url) throw Exception{ DefaultHttpClient httpClient = new DefaultHttpClient(); HttpParams params = httpClient.getParams(); HttpConnectionParams.setConnectionTimeout(params, 10000); HttpConnectionParams.setSoTimeout(params, 10000); HttpHost proxy = new HttpHost(getProxy(), getProxyPort()); ConnRouteParams.setDefaultProxy(params, proxy); URI uri; InputStream data = null; try { uri = new URI(url); HttpGet method […]