2017-10-25 16 views

答えて

0

私はポストのための良いユーティリティをオンラインで見つけました。 HttpPostRequestこれは私が欲しいものの90%です。 これはPOSTのみをサポートしており、PUT要求も必要です。

私はPOSTとPUTの両方をサポートするように上記のコードを修正しました。

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 
import java.nio.charset.Charset; 

import org.apache.commons.codec.binary.Base64; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.HttpClientBuilder; 

public class HttpRequest{ 

    HttpEntityEnclosingRequestBase createConnectivity(HttpEntityEnclosingRequestBase requestBase,String username, String password) 
    { 
     HttpEntityEnclosingRequestBase request = requestBase; 
     String auth=new StringBuffer(username).append(":").append(password).toString(); 
     byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII"))); 
     String authHeader = "Basic " + new String(encodedAuth); 
     request.setHeader("AUTHORIZATION", authHeader); 
     request.setHeader("Content-Type", "application/json"); 
      request.setHeader("Accept", "application/json"); 
      request.setHeader("X-Stream" , "true"); 
     return request; 
    } 

    void executeReq(String jsonData, HttpEntityEnclosingRequestBase request) 
    { 
     try{ 
      executeHttpRequest(jsonData, request); 
     } 
     catch (UnsupportedEncodingException e){ 
      System.out.println("error while encoding api url : "+e); 
      e.printStackTrace(); 
     }catch(Exception e){ 
      System.out.println("exception occured while sending http request : "+e); 
      e.printStackTrace(); 
     } 
     finally{ 
      request.releaseConnection(); 
     } 
    } 

    void executeHttpRequest(String jsonData, HttpEntityEnclosingRequestBase request) throws UnsupportedEncodingException, IOException 
    { 
     HttpResponse response=null; 
     String line = ""; 
     StringBuffer result = new StringBuffer(); 
     request.setEntity(new StringEntity(jsonData)); 
     HttpClient client = HttpClientBuilder.create().build(); 
     response = client.execute(request); 
     System.out.println("Post parameters : " + jsonData); 
     System.out.println("Response Code : " +response.getStatusLine().getStatusCode()); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
     while ((line = reader.readLine()) != null){ result.append(line); } 
     System.out.println(result.toString()); 
    } 
} 

使用法:

HttpPut put = new HttpPut("URL");//HttpPost for post request 
HttpEntityEnclosingRequestBase request=httpPostReq.createConnectivity(put, "username", "password"); 
httpPostReq.executeReq(getJSONFrom(user), request); 
+0

[Apache Commons HTTP client](http://hc.apache.org/httpcomponents-client-ga/)のような完全なライブラリを使用しないのはなぜですか? – zack6849

+0

ライブラリには資格情報とデータの両方が一緒に表示されません。 – Will

+0

ユーザー名とパスワードの「文字セット」については、サーバーが要求するもの(https://tools.ietf.org/html/rfc7617#section-3)を使用することをお勧めします。 –

2

この記事http://www.baeldung.com/httpclient-4-basic-authenticationもあなたのために有用です。 Apache HttpClient 4でリクエストを行うのはとても簡単です。

+0

類似の例私は、データ付きの投稿のみ、または資格付きではなく、両方ではないオンラインでしか見つかりませんでした。 – Will

関連する問題