将一段 HttpClient 写的代码,改用OkHttp3来实现 40C

以下是HttpClient的代码,功能就是向一个url发送get请求,并携带一个.p12格式的证书文件

 package com.sinnk.web.module.weixin.utils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import javax.net.ssl.SSLContext;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;

public class Test {

    public static void main(String[] args) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException, KeyManagementException, UnrecoverableKeyException {
        // TODO Auto-generated method stub
        KeyStore keyStore  = KeyStore.getInstance("PKCS12");
        FileInputStream instream = new FileInputStream(new File("C:\\apiclient_cert.p12"));
        try {
            keyStore.load(instream, "1499761822".toCharArray());
        } finally {
            instream.close();
        }

        // Trust own CA and all self-signed certs
        SSLContext sslcontext = SSLContexts.custom()
                .loadKeyMaterial(keyStore, "1499761822".toCharArray())
                .build();
        // Allow TLSv1 protocol only
        @SuppressWarnings("deprecation")
        SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                sslcontext,
                new String[] { "TLSv1" },
                null,
                SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
        CloseableHttpClient httpclient = HttpClients.custom()
                .setSSLSocketFactory(sslsf)
                .build();
        try {

            HttpGet httpget = new HttpGet("https://api.mch.weixin.qq.com/secapi/pay/refund");

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

            CloseableHttpResponse response = httpclient.execute(httpget);
            try {
                HttpEntity entity = response.getEntity();

                System.out.println("----------------------------------------");
                System.out.println(response.getStatusLine());
                if (entity != null) {
                    System.out.println("Response content length: " + entity.getContentLength());
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(entity.getContent()));
                    String text;
                    while ((text = bufferedReader.readLine()) != null) {
                        System.out.println(text);
                    }

                }
                EntityUtils.consume(entity);
            } finally {
                response.close();
            }
        } finally {
            httpclient.close();
        }

    }

}

要求用OkHttp3来实现。

1个回答

public class PersistentCookieStore {

private static final String LOG_TAG = "PersistentCookieStore";

private static final String COOKIE_PREFS = "Cookies_Prefs";

private final Map<String, ConcurrentHashMap<String, Cookie>> cookies;  
private final SharedPreferences cookiePrefs;  


public PersistentCookieStore(Context context) {  
    cookiePrefs = context.getSharedPreferences(COOKIE_PREFS, 0);  
    cookies = new HashMap<String, ConcurrentHashMap<String, Cookie>>();  

    //将持久化的cookies缓存到内存中 即map cookies  
    Map<String, ?> prefsMap = cookiePrefs.getAll();  
    for (Map.Entry<String, ?> entry : prefsMap.entrySet()) {  
        String[] cookieNames = TextUtils.split((String) entry.getValue(), ",");  
        for (String name : cookieNames) {  
            String encodedCookie = cookiePrefs.getString(name, null);  
            if (encodedCookie != null) {  
                Cookie decodedCookie = decodeCookie(encodedCookie);  
                if (decodedCookie != null) {  
                    if (!cookies.containsKey(entry.getKey())) {  
                        cookies.put(entry.getKey(), new ConcurrentHashMap<String, Cookie>());  
                    }  
                    cookies.get(entry.getKey()).put(name, decodedCookie);  
                }  
            }  
        }  
    }  
}  

protected String getCookieToken(Cookie cookie) {  
    return cookie.name() + "@" + cookie.domain();  
}  

public void add(HttpUrl url, Cookie cookie) {  
    String name = getCookieToken(cookie);  

    //将cookies缓存到内存中 如果缓存过期 就重置此cookie  
    if (!cookie.persistent()) {  
        if (!cookies.containsKey(url.host())) {  
            cookies.put(url.host(), new ConcurrentHashMap<String, Cookie>());  
        }  
        cookies.get(url.host()).put(name, cookie);  
    } else {  
        if (cookies.containsKey(url.host())) {  
            cookies.get(url.host()).remove(name);  
        }  
    }  

    //讲cookies持久化到本地  
    SharedPreferences.Editor prefsWriter = cookiePrefs.edit();  
    prefsWriter.putString(url.host(), TextUtils.join(",", cookies.get(url.host()).keySet()));  
    prefsWriter.putString(name, encodeCookie(new SerializableOkHttpCookies(cookie)));  
    prefsWriter.apply();  
}  

public List<Cookie> get(HttpUrl url) {  
    ArrayList<Cookie> ret = new ArrayList<Cookie>();  
    if (cookies.containsKey(url.host()))  
        ret.addAll(cookies.get(url.host()).values());  
    return ret;  
}  

public boolean removeAll() {  
    SharedPreferences.Editor prefsWriter = cookiePrefs.edit();  
    prefsWriter.clear();  
    prefsWriter.apply();  
    cookies.clear();  
    return true;  
}  

public boolean remove(HttpUrl url, Cookie cookie) {  
    String name = getCookieToken(cookie);  

    if (cookies.containsKey(url.host()) && cookies.get(url.host()).containsKey(name)) {  
        cookies.get(url.host()).remove(name);  

        SharedPreferences.Editor prefsWriter = cookiePrefs.edit();  
        if (cookiePrefs.contains(name)) {  
            prefsWriter.remove(name);  
        }  
        prefsWriter.putString(url.host(), TextUtils.join(",", cookies.get(url.host()).keySet()));  
        prefsWriter.apply();  

        return true;  
    } else {  
        return false;  
    }  
}  

public List<Cookie> getCookies() {  
    ArrayList<Cookie> ret = new ArrayList<Cookie>();  
    for (String key : cookies.keySet())  
        ret.addAll(cookies.get(key).values());  

    return ret;  
}  

/** 
 * cookies 序列化成 string 
 * 
 * @param cookie 要序列化的cookie 
 * @return 序列化之后的string 
 */  
protected String encodeCookie(SerializableOkHttpCookies cookie) {  
    if (cookie == null)  
        return null;  
    ByteArrayOutputStream os = new ByteArrayOutputStream();  
    try {  
        ObjectOutputStream outputStream = new ObjectOutputStream(os);  
        outputStream.writeObject(cookie);  
    } catch (IOException e) {  
        Log.d(LOG_TAG, "IOException in encodeCookie", e);  
        return null;  
    }  

    return byteArrayToHexString(os.toByteArray());  
}  

/** 
 * 将字符串反序列化成cookies 
 * 
 * @param cookieString cookies string 
 * @return cookie object 
 */  
protected Cookie decodeCookie(String cookieString) {  
    byte[] bytes = hexStringToByteArray(cookieString);  
    ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);  
    Cookie cookie = null;  
    try {  
        ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);  
        cookie = ((SerializableOkHttpCookies) objectInputStream.readObject()).getCookies();  
    } catch (IOException e) {  
        Log.d(LOG_TAG, "IOException in decodeCookie", e);  
    } catch (ClassNotFoundException e) {  
        Log.d(LOG_TAG, "ClassNotFoundException in decodeCookie", e);  
    }  

    return cookie;  
}  

/** 
 * 二进制数组转十六进制字符串 
 * 
 * @param bytes byte array to be converted 
 * @return string containing hex values 
 */  
protected String byteArrayToHexString(byte[] bytes) {  
    StringBuilder sb = new StringBuilder(bytes.length * 2);  
    for (byte element : bytes) {  
        int v = element & 0xff;  
        if (v < 16) {  
            sb.append('0');  
        }  
        sb.append(Integer.toHexString(v));  
    }  
    return sb.toString().toUpperCase(Locale.US);  
}  

/** 
 * 十六进制字符串转二进制数组 
 * 
 * @param hexString string of hex-encoded values 
 * @return decoded byte array 
 */  
protected byte[] hexStringToByteArray(String hexString) {  
    int len = hexString.length();  
    byte[] data = new byte[len / 2];  
    for (int i = 0; i < len; i += 2) {  
        data[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4) + Character.digit(hexString.charAt(i + 1), 16));  
    }  
    return data;  
}}  

[java] view plain copy
public class SerializableOkHttpCookies implements Serializable {

private transient final Cookie cookies;  
private transient Cookie clientCookies;  

public SerializableOkHttpCookies(Cookie cookies) {  
    this.cookies = cookies;  
}  

public Cookie getCookies() {  
    Cookie bestCookies = cookies;  
    if (clientCookies != null) {  
        bestCookies = clientCookies;  
    }  
    return bestCookies;  
}  

private void writeObject(ObjectOutputStream out) throws IOException {  
    out.writeObject(cookies.name());  
    out.writeObject(cookies.value());  
    out.writeLong(cookies.expiresAt());  
    out.writeObject(cookies.domain());  
    out.writeObject(cookies.path());  
    out.writeBoolean(cookies.secure());  
    out.writeBoolean(cookies.httpOnly());  
    out.writeBoolean(cookies.hostOnly());  
    out.writeBoolean(cookies.persistent());  
}  

private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {  
    String name = (String) in.readObject();  
    String value = (String) in.readObject();  
    long expiresAt = in.readLong();  
    String domain = (String) in.readObject();  
    String path = (String) in.readObject();  
    boolean secure = in.readBoolean();  
    boolean httpOnly = in.readBoolean();  
    boolean hostOnly = in.readBoolean();  
    boolean persistent = in.readBoolean();  
    Cookie.Builder builder = new Cookie.Builder();  
    builder = builder.name(name);  
    builder = builder.value(value);  
    builder = builder.expiresAt(expiresAt);  
    builder = hostOnly ? builder.hostOnlyDomain(domain) : builder.domain(domain);  
    builder = builder.path(path);  
    builder = secure ? builder.secure() : builder;  
    builder = httpOnly ? builder.httpOnly() : builder;  
    clientCookies =builder.build();  
}  

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
单例Okhttp能像单例httpclient一样不需要我们手动去维护cookie吗?

android 6.0sdk移除了apache的httpclient,volley必须得手动维护cookie,网上有文章说Okhttp支持cookies维护,但我有个疑问,单例Okhttp能像单例httpclient一样不需要我们手动去维护cookie吗?多谢解答

请问各位大神Okhttp底层是如何实现拦截的?如何实现AOP的?研究了好久也看不出来,谢谢指教谢谢

![图片说明](https://img-ask.csdn.net/upload/201804/05/1522900821_223162.jpg) ![图片说明](https://img-ask.csdn.net/upload/201804/05/1522900880_251375.png)

关于OKHTTP 的问题请教

请教一个问题,如下代码 ``` public class OKHttpUtil { public static String contentType="text/html; charset=UTF-8"; public static int timeOunt = 30; public static OkHttpClient client = new OkHttpClient.Builder().readTimeout(timeOunt, TimeUnit.SECONDS).build(); public static String sendPost(String url, Map<String, String> paramMap){ FormBody.Builder builder = new FormBody.Builder(); Iterator it = paramMap.keySet().iterator(); while (it.hasNext()){ String key = it.next().toString(); builder.add(key,paramMap.get(key)); } Request request = new Request.Builder().url(url).addHeader("Content-Type",contentType).post(builder.build()).build(); Response response = null; try { response = client.newCall(request).execute(); return response.body().string(); } catch (IOException e) { e.printStackTrace(); } return null; } /** * 异步发送 * @param url * @param paramMap * @param callback */ public static void sendPostAsyn(String url, Map<String, String> paramMap ,Callback callback){ FormBody.Builder builder = new FormBody.Builder(); Iterator it = paramMap.keySet().iterator(); while (it.hasNext()){ String key = it.next().toString(); builder.add(key,paramMap.get(key)); } Request request = new Request.Builder().url(url).addHeader("Content-Type",contentType).post(builder.build()).build(); Call call = client.newCall(request); call.enqueue(callback); } } ``` 第一次使用这个框架不是很了解,现在有2个疑问,想请教下对这个框架比较了解的朋友! 第一个疑问: 使用一个OkHttpClient 对象 在高并发时,能否即发送同步请求,又发布异步请求。如,使用 OKHttpUtil.sendPostAsyn 发送异步后,在调用OKHttpUtil。sendPost 发送同步,发送使用同一个OkHttpClient 对象。 第二个疑问 OkHttpClient 对象每次发送都要new ,还是可以像代码中初始化一个静态的一直使用

OkHttp使用post方式提交multipart/form-data

之前使用HttpClient,但是由于AS的问题,放弃了,改用OkHttp,但还是出现提交了表单但是没有出现正常的成功跳转, 同时返回状态码却是200 OK;还有就是,我的post方法指定的url是一个get方式提交数据的url,然后在这个url的基础上 再提交post数据,截图如下: 这是multipart/form-data: ![图片说明](https://img-ask.csdn.net/upload/201605/09/1462773887_889400.png) 这是我的代码: ![图片说明](https://img-ask.csdn.net/upload/201605/09/1462773914_754910.png)

关于httpclient访问提转页面的实现

我使用httpclient访问路径 http://localhost:8078/Test/test1111.htm 并打印该页面的html代码 但该test111.htm的代码是跳转到别的页面,如: [code="html"]<html> <head> <script> function test(){ location.href = "http://www.baidu.com"; } </script> </head> <body onload = "test();"> </body> </html>[/code] 其实httpclient取出的代码就是该test1111.htm的代码,但该页面其实是直接跳转到www.baidu.com页面 我如果想去www.baidu.com页面的代码该如何实现呢,当然我可以直接使用httpclient访问 www.baidu.com,但在实际运用过程中跳转到那个页面的路径是被加密的,我无法取得,在该例子中就是我只知道我访问的页面会跳转至其他页面,但我无法取得它跳转到得就是www.baidu.com,这个时候我希望httpclient能够延迟一下访问,当然这个只是我的意思,不知道能否实现,而达到取得跳转后页面的html代码,请各位高人给下指点,谢谢,补上httpclient访问的简单代码段,提供大家调试,谢谢 [code="java"]private static void test() throws HttpException, IOException{ HttpClient httpclient = new HttpClient(); httpclient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, CONTENT_CHARSET); GetMethod getMethod = new GetMethod("http://localhost:8078/Test/test1111.htm"); int statusCode = httpclient.executeMethod(getMethod); String responseString = new String(getMethod.getResponseBodyAsString().getBytes("gbk")); System.out.println(responseString); }[/code] 各位知道的老师请给予指点,感激不尽,分数不多,没办法 [b]问题补充:[/b] 你说执行html中的js代码 问题就在于对方对该js代码采取了压缩,加密...等等很多操作 甚至有自己一套验证方式,想跟踪js代码来获取最后的动态路径是很困难的 有没有其他什么办法呢 [b]问题补充:[/b] 自己解决了 用jdic 不过lovewhzlq的httputil也应该是一个不错的选择 只是没有详细去研究 谢谢了

HTTPClient代码中的CURL命令

<div class="post-text" itemprop="text"> <p>I'm planning on working with a text uploading site, <a href="http://textuploader.com/" rel="nofollow">http://textuploader.com/</a>, but I don't seem to understand this. I probably haven't looked hard enough, but that's not the point. What I'm really looking for is just simply how to do these commands, or just how to use "<a href="http://hc.apache.org/httpcomponents-client-ga/" rel="nofollow">HTTPClient</a>" to do these sorts of things. The site with all of the commands and information is <a href="http://textuploader.com/developers/getstarted" rel="nofollow">here</a>. Also, just for convenience, I should leave the most important ones for me, in this post:</p> <pre><code>POST: /posts This will allow you to post to your account. { "Title": "Sample Title", "Content": "Post body goes here.", "Type": "public" } Example: curl -X POST "http://api.textuploader.com/v1/posts" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "X-TextUploader-API-Key: your-api-key-here" \ -v \ -d '{"title": "Sample Title", "content": "Post body goes here.", "type": "public"}' And this: GET: /posts/[shortcode] This method will return the complete body of the requested shortcode. </code></pre> </div>

HTTPClient可否保持一个会话,就好像浏览器自动跳转、或执行JS

在写一个网页获取的java程序时,用到了HTTPClient包,现在出现这样的问题,可能有一些网站防止获取,采用了一些跳转操作,用httpclient提交了请求后,返回的状态码是200,但这个网页中又加入了一些JS代码,比如: window.setTimeout('document.getElementById("formxh4t").submit();',3000); 这样也完成了页面的跳转,在浏览器中是可以自动的跳转,但HTTPClient就不行了,我想的是有没有什么方法可以跟踪住这个会话,就想在浏览器中一样。 当然,要是有别的什么jar包可以实现这个功能化,希望能推荐一些,谢谢!

[Java]请问springMVC这段代码啥意思,关于httpclient的

这是一个controller方法的尾巴,方法上的返回值是void 请问这个注解中的属性和下面那段代码表示的什么意思 “JsonParam”和“cfg.getJsonParam()”表示的是项目里的一个属性类,不用在意 ``` @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE) public void upload(。。。。。。。。 ``` ``` HttpHeaders headers = new HttpHeaders(); MediaType mediaType = new MediaType("application", "merge-patch+json"); headers.setContentType(mediaType); HttpEntity<JsonParam> entity = new HttpEntity<>(cfg.getJsonParam(), headers); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); RestTemplate restTemplate = new RestTemplate(requestFactory); ``` 为了看的方便我把包放出来 ``` import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; ```

寻求HttpClient无法写Cookie的解决方法

问题描述: 公司申请了一个超短域名,假设改域名为 a.cn,有多个二级域名 比如 www.a.cn; file.a.cn;这些二级域名都有一个共同的功能, 就是要写cookie,而且这个cookie要在a.cn内共享。根据短域名写cookie的可行性,只能把写Cookie的功能统一交给a.cn这台服务器来执行才可以写成功。所以我现在如果要在www.a.cn服务器上写cookie(可供a.cn共享的Cookie),就只能借助HttpClient 在a.cn服务器上有一个Servlet,用来负责写Cookie,www.a.cn这台服务器上的应用程序借助HttpClient调用a.cn上的Servlet 一切执行都没有问题,但是就是Cookie无法写入文件中。如果在IE中直接调用那个Servlet,这可以把Cookie成功写入文件。 假如Servlet的完整请求地址为 http://a.cn/servlet a.an 服务器负责写Cookie的代码如下 [code="java"] public class CookieServlet extends HttpServlet { public CookieServlet() { super(); } public void destroy() { super.destroy(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie cookie = new Cookie("CookieName", "haha"); cookie.setMaxAge(100000); cookie.setPath("/"); //这个不需要设置 //cookie.setDomain("a.cn"); response.addCookie(cookie); } public void init() throws ServletException { } } [/code] www.a.cn的请求代码如下 [code="java"] public class Test { public static void main(String args[]) { String cookieUrl = "http://a.cn/servlet"; String result = HttpUtils.executeGetMethod(cookieUrl); //其余代码省略,这里执行完后,并没有得到理想的结果。cookie没有写成功,如果 //在IE浏览器中执行 执行http://a.cn/servlet ,则可以成功写cookie } [/code] [code="java"] import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Iterator; import java.util.Map; import java.util.Set; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HostConfiguration; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpConnectionManager; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.cookie.CookiePolicy; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.params.HttpMethodParams; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class HttpUtils { private static MultiThreadedHttpConnectionManager httpManager; private static final Log log = LogFactory.getLog(HttpUtils.class); public static HttpConnectionManager getHttpManager() { if (httpManager == null) { httpManager = new MultiThreadedHttpConnectionManager(); httpManager.getParams().setConnectionTimeout(3000); } return httpManager; } public static HttpClient createHttpClient() { HttpClient client = new HttpClient(getHttpManager()); return client; } public static String executeGetMethod(String url) { HttpMethod method = new GetMethod(url.toString()); return getHttpResult(method); } public static String executePostMethod(String url, Map<String, String> map) { PostMethod method = new InnerPostMethod(url); method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler()); if (map == null || map.size() == 0) { throw new IllegalArgumentException("map must be not null"); } NameValuePair[] data = new NameValuePair[map.size()]; Set<Map.Entry<String, String>> set = map.entrySet(); Iterator<Map.Entry<String, String>> it = set.iterator(); int i = 0; while (it.hasNext()) { Map.Entry<String, String> entry = it.next(); data[i++] = new NameValuePair(entry.getKey(), entry.getValue()); } method.setRequestBody(data); return getHttpResult(method); } private static String getHttpResult(HttpMethod method) { InputStream is = null; try { HttpClient client = HttpUtils.createHttpClient(); int stat = client.executeMethod(method); if (stat != HttpStatus.SC_OK) { return null; } is = method.getResponseBodyAsStream(); BufferedReader reader = new BufferedReader(new InputStreamReader( is, "utf-8")); StringBuilder builder = new StringBuilder(); String tmp = null; while ((tmp = reader.readLine()) != null) { builder.append(tmp); } // Cookie cks[] = client.getState().getCookies(); // if (cks != null) { // for (Cookie c : cks) { // System.out.println(c.getName()+"\t"+c.getValue()); // } // } return builder.toString(); } catch (HttpException e) { return null; } catch (IOException e) { return null; } finally { method.releaseConnection(); try { if (is != null) { is.close(); } } catch (IOException e) { e.printStackTrace(); } } } static class InnerPostMethod extends PostMethod { public InnerPostMethod(String url) { super(url); } @Override protected String getContentCharSet(Header contentheader) { return "UTF-8"; } } } [/code] 希望有遇到过类似问题的高手,给予帮助,谢谢

java实现httpclient上传文件和普通参数到servlet

哪位能推荐一个好的方法,实现httpclient上传文件和普通参数到servlet,post方法,servlet端是普通web项目,不能用spring相关方法。自测使用的MultipartEntityBuilder,但是servlet接收不到上传的参数,在线急等

java的httpClient类调用https接口时,可以不写SSL相关代码,直接用跟调用http接口时一样的代码吗?

最近看到代码中别人封装的http请求类,请求第三方https的接口时,没有写任何SSL相关的代码。https不是需要做SSL的操作或者进行跳过证书验证吗?但是我看代码中没有一个地方有这个操作的,而且居然还访问正常。https可以用访问http的方式访问吗?![图片说明](https://img-ask.csdn.net/upload/201911/06/1573055490_435016.jpg) ![图片说明](https://img-ask.csdn.net/upload/201911/06/1573055508_589351.jpg)上面是他写的代码

怎么使用httpclient实现http接口调用实例

接口地址: https://data2.contec365.com/login.php 请求方式: post 需要传递参数:![图片说明](https://img-ask.csdn.net/upload/201606/29/1467194093_742151.png) 参数内容为xml格式![图片说明](https://img-ask.csdn.net/upload/201606/29/1467194080_167521.png) 输出![图片说明](https://img-ask.csdn.net/upload/201606/29/1467194221_53039.png) 格式为xml格式:![图片说明](https://img-ask.csdn.net/upload/201606/29/1467194307_683270.png) code: 为提示信息 文档就是这样的,我应该怎么写,能不能写个示例,还有 servlet怎么调用,给点建议,不胜感激,谢谢,困扰我好多天了,希望能给出代码,因为我没写,也上网查了都找不到合适的,所以希望给出代码,谢谢

httpClient发送json的小程序

用spring的组件包HttpClient写一个关于发送json的小程序。

org.apache.http.client.HttpClient 怎么发送一段xml到服务器啊

注意: 这里的httpclient不是common包下的 是org.apache.http.client.HttpClient 1 org.apache.http.client.HttpClient 有没有注入setQueryString("")这样的方法呢. 2 或者有没其他方法来发送一段xml文件 3 org.apache.http.client.HttpClient 可不可以获取httprequest 如果可以获取又应该怎么获取呢 [b]问题补充:[/b] 谢谢 yuankai 只是你提供的代码 其实是基于common包下的httpclient 不是我所要的。谢谢。 [b]问题补充:[/b] common包下提交请求的两个对象:PostMethod GetMethod 我想要的提交请求的两个对象的是 HttpPost HttpGet

httpClient 指定端口访问网络

我项目是java的, 由于我的服务器只开了几个端口给我访问网络,服务器再局域网,访问网络要通过一个堡垒服务器, 现在我只能使用我们服务器的四个端口,这四个端口能访问网络, 由于HTppClient 是随机使用端口去发起请求的,所以我现在就想知道能不能指定httpCLient的使用端口 我百度了一下,试了一下设置代码, 但代理只能设置回本机,而且端口也还是那几个可以使用 那不就是一个死循环? 有没有办法,能让httpClient 指定使用哪个端口访问网络, 就好像Socket那样,指定使用哪个端口收发 求大大帮忙,我现在思路是,如果指定不了,我只能用Socket 自己实现http协议了, 真心求,我第一次来Csdn这里提问,感觉CSDN越做越好了~

httpclient获取到的网页内容和查看网页源代码的内容不同

最近在学httpclient,随便抓来一个网页:"http://ah.10086.cn",想通过httpget方法得到其原网页内容,本来以为很简单,先是碰到https验证问题,通过验证后拿到的网页源码竟然和鼠标右键查看网页源码不同,百思不得其解……

java的httpclient能实现linux中的curl -u命令吗?

java的httpclient能实现linux中的curl -u命令吗?如何实现

使用httpclient代理ip然后通过百度搜索一个词进入一个页面

就是利用代理ip来模拟百度搜索,然后返回这个页面然后记录!这个可以实现吗?!具体代码是什么啊!? 还有代码的意义是什么?

java HttpClient 请求乱码

java HttpClient 4.3.6的jar包 为什么我get post 请求中文乱码 还有怎么请求的时候怎么带参数,我这样写有什么问题没有,现在的情况就是乱码 public static void get() { try { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpget = new HttpGet("http://api.a.7xz.com/v140/ceshi"); httpget.addHeader(new BasicHeader("npi", "3")); // httpget.addHeader("", ""); CloseableHttpResponse httpReponse = httpClient.execute(httpget); try { System.out.println(httpReponse.getStatusLine()); HttpEntity entity = httpReponse.getEntity(); System.out.println(EntityUtils.toString(entity)); } finally { httpReponse.close(); } } catch (Exception e) { e.printStackTrace(); } } public static void post() { try { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost("http://api.a.7xz.com/v140/ceshi"); List<BasicNameValuePair> Listnvps = new ArrayList(); Listnvps.add(new BasicNameValuePair("npi", "3")); httpPost.setEntity(new UrlEncodedFormEntity(Listnvps, "UTF-8")); CloseableHttpResponse httppHttpResponse2 = httpClient .execute(httpPost); try { System.out.println(httppHttpResponse2.getStatusLine()); System.out.println(EntityUtils.toString(httppHttpResponse2 .getEntity())); } finally { httppHttpResponse2.close(); } httpClient.close(); } catch (Exception e) { e.printStackTrace(); } }

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

Linux面试题(2020最新版)

文章目录Linux 概述什么是LinuxUnix和Linux有什么区别?什么是 Linux 内核?Linux的基本组件是什么?Linux 的体系结构BASH和DOS之间的基本区别是什么?Linux 开机启动过程?Linux系统缺省的运行级别?Linux 使用的进程间通信方式?Linux 有哪些系统日志文件?Linux系统安装多个桌面环境有帮助吗?什么是交换空间?什么是root帐户什么是LILO?什...

Linux命令学习神器!命令看不懂直接给你解释!

大家都知道,Linux 系统有非常多的命令,而且每个命令又有非常多的用法,想要全部记住所有命令的所有用法,恐怕是一件不可能完成的任务。 一般情况下,我们学习一个命令时,要么直接百度去搜索它的用法,要么就直接用 man 命令去查看守冗长的帮助手册。这两个都可以实现我们的目标,但有没有更简便的方式呢? 答案是必须有的!今天给大家推荐一款有趣而实用学习神器 — kmdr,让你解锁 Linux 学习新姿势...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

史上最全的 python 基础知识汇总篇,没有比这再全面的了,建议收藏

网友们有福了,小编终于把基础篇的内容全部涉略了一遍,这是一篇关于基础知识的汇总的文章,请朋友们收下,不用客气,不过文章篇幅肯能会有点长,耐心阅读吧爬虫(七十)多进程multiproces...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

85后蒋凡:28岁实现财务自由、34岁成为阿里万亿电商帝国双掌门,他的人生底层逻辑是什么?...

蒋凡是何许人也? 2017年12月27日,在入职4年时间里,蒋凡开挂般坐上了淘宝总裁位置。 为此,时任阿里CEO张勇在任命书中力赞: 蒋凡加入阿里,始终保持创业者的冲劲,有敏锐的...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

新一代神器STM32CubeMonitor介绍、下载、安装和使用教程

关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang最近ST官网悄悄新上线了一款比较强大的工具:STM32CubeMonitor V1.0.0。经过我研究和使用之...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

大学一路走来,学习互联网全靠这几个网站,最终拿下了一把offer

大佬原来都是这样炼成的

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

什么时候跳槽,为什么离职,你想好了么?

都是出来打工的,多为自己着想

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

你期望月薪4万,出门右拐,不送,这几个点,你也就是个初级的水平

先来看几个问题通过注解的方式注入依赖对象,介绍一下你知道的几种方式@Autowired和@Resource有何区别说一下@Autowired查找候选者的...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

立即提问
相关内容推荐