getMethod에 쿼리 매개 변수를 추가하려면 (Java Commons-Httpclient 사용) 어떻게하나요?

StackOverflow https://stackoverflow.com/questions/217070

  •  03-07-2019
  •  | 
  •  

문제

Java에 Apache의 Commons-httpclient를 사용하면 getMethod 인스턴스에 쿼리 매개 변수를 추가하는 가장 좋은 방법은 무엇입니까? PostMethod를 사용하는 경우 매우 간단합니다.

PostMethod method = new PostMethod();
method.addParameter("key", "value");

그러나 getMethod에는 "AddParameter"메소드가 없습니다. 나는 이것이 효과가 있음을 발견했다 :

GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString(new NameValuePair[] {
    new NameValuePair("key", "value")
});

그러나 대부분의 예제는 매개 변수를 URL로 직접 하드 코딩하는 것입니다.

GetMethod method = new GetMethod("http://www.example.com/page?key=value");

또는 쿼리 문자열을 하드 코딩하십시오.

GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString("?key=value");

이러한 패턴 중 하나가 선호됩니까? 그리고 왜 post method와 getmethod 사이의 API 불일치? 그리고 다른 httpmethodparams 방법은 무엇입니까?

도움이 되었습니까?

해결책

우편 메소드에는 포스트 매개 변수가 있지만 방법을 얻지 못합니다.

쿼리 매개 변수는 URL에 내장되어 있습니다. HttpClient의 현재 버전은 생성자의 문자열을 허용합니다. 위의 키, 값 쌍을 추가하려면 다음을 사용할 수 있습니다.

String url = "http://www.example.com/page?key=value";
GetMethod method = new GetMethod(url);

좋은 시작 튜토리얼은 아파치 자카르타 커먼즈 페이지.

업데이트: 주석에서 제안한 바와 같이, namevaluepair는 작동합니다.

GetMethod method = new GetMethod("example.com/page"); 
method.setQueryString(new NameValuePair[] { 
    new NameValuePair("key", "value") 
}); 

다른 팁

그것은 단지 개인적인 취향의 문제가 아닙니다. 여기서의 적절한 문제는 URL을 인코딩하여 매개 변수 값을 인코딩하므로 값이 추가 구분 기호 등으로 손상되거나 잘못 해석되지 않습니다.

항상 그렇듯이 API 문서를 자세히 읽는 것이 가장 좋습니다.httpclient API 문서

이것을 읽으면 볼 수 있습니다 setQueryString(String) URL-encode 또는 매개 변수 및 값을 구분하지 않으면 setQueryString(NameValuePair[]) 자동으로 URL-encode를 사용하고 매개 변수 이름과 값을 구분합니다. 암페어, 동일한 부호 등이 포함될 수 있기 때문에 동적 데이터를 사용할 때마다 가장 좋은 방법입니다.

이 방법으로 시도하십시오.

    URIBuilder builder = new URIBuilder("https://graph.facebook.com/oauth/access_token")
            .addParameter("client_id", application.getKey())
            .addParameter("client_secret", application.getSecret())
            .addParameter("redirect_uri", callbackURL)
            .addParameter("code", code);

    HttpPost method = new HttpPost(builder.build());
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top