软件编程
位置:首页>> 软件编程>> java编程>> HttpClient 请求 URL字符集转码问题

HttpClient 请求 URL字符集转码问题

作者:jinxiaoshao  发布时间:2022-11-20 17:33:07 

标签:HttpClient,URL,字符集,转码

问题是这样的,我用eclipse发送httpclient请求如下没有问题,但是在idea中就返回400,为毛呢???excuse me?


package com.vol.timingTasks;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

import java.io.IOException;

/**
* 数据抽取测试类
*
* @author xbx
*
*/
public class XBXmain {
 private final static String ENCODE = "utf-8";

public static void main(String[] args) throws Exception {
getDataA();
 }

/*
  * Basic验证
  * 用户名:
  * 密钥:
  */
 public static void getDataA() throws Exception{
   HttpResponse httpResponse = null;
   HttpClient httpClient = new DefaultHttpClient();
   String projectName = "中科洛阳信息产业园项目(一期)";
   String url = "http://labour.ztjs.cn/clound/wsForThird/laboursByProjectName/"+projectName ;
   HttpGet get = new HttpGet(url);
   try {

// 创建HttpClientBuilder
     HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
     // 设置BasicAuth
     CredentialsProvider provider = new BasicCredentialsProvider();
     // Create the authentication scope
     AuthScope scope = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM);
     // Create credential pair,在此处填写用户名和密码
     UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("", "");
     // Inject the credentials
     provider.setCredentials(scope, credentials);
     // Set the default credentials provider
     httpClientBuilder.setDefaultCredentialsProvider(provider);
     // HttpClient
     CloseableHttpClient closeableHttpClient = httpClientBuilder.build();

httpResponse = closeableHttpClient.execute(get);
     HttpEntity httpEntity = httpResponse.getEntity();
     String httpResult = EntityUtils.toString(httpEntity);
     String httpResult2 = EntityUtils.toString(httpEntity);
   } catch (IOException e) {
   }

}

}

把 访问地址:http://labour.ztjs.cn/clound/wsForThird/laboursByProjectName/中科洛阳信息产业园项目(一期) 放在谷歌浏览器,然后再复制出来,发现汉字编码格式变了。ok,那就先转换下编码格式再发送请求。  修改后代码如下:


package com.vol.timingTasks;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

import java.io.IOException;

/**
* 数据抽取测试类
*
* @author xbx
*
*/
public class XBXmain {
 private final static String ENCODE = "utf-8";

public static void main(String[] args) throws Exception {
getDataA();
 }

/*
  * Basic验证
  * 用户名:
  * 密钥:
  */
 public static void getDataA() throws Exception{
   HttpResponse httpResponse = null;
   HttpClient httpClient = new DefaultHttpClient();
   String projectName = "中科洛阳信息产业园项目(一期)";
   String url = "http://labour.ztjs.cn/clound/wsForThird/laboursByProjectName/"+java.net.URLEncoder.encode(projectName, ENCODE);//URL 中文 转码
   HttpGet get = new HttpGet(url);
   try {

// 创建HttpClientBuilder
     HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
     // 设置BasicAuth
     CredentialsProvider provider = new BasicCredentialsProvider();
     // Create the authentication scope
     AuthScope scope = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM);
     // Create credential pair,在此处填写用户名和密码
     UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("", "");
     // Inject the credentials
     provider.setCredentials(scope, credentials);
     // Set the default credentials provider
     httpClientBuilder.setDefaultCredentialsProvider(provider);
     // HttpClient
     CloseableHttpClient closeableHttpClient = httpClientBuilder.build();

httpResponse = closeableHttpClient.execute(get);
     HttpEntity httpEntity = httpResponse.getEntity();
     String httpResult = EntityUtils.toString(httpEntity);
     String httpResult2 = EntityUtils.toString(httpEntity);
   } catch (IOException e) {
   }

}

}

再试试,请求成功,只需要转下编码:

String url = "http://labour.ztjs.cn/clound/wsForThird/laboursByProjectName/"+java.net.URLEncoder.encode(projectName, ENCODE);//URL  中文 转码

来源:https://blog.csdn.net/xubenxismile/article/details/96440133

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com