2016-09-05 5 views
0

내가 덕 덕고 API의 일부 즉시 답을 얻기 위해 노력하고있어,하지만 난 여기에 오류 (403)가 계속 반환하는 것은 지금까지 내 코드입니다 :HTTP GET (403)

static JSONObject getData(String term){ 
    JSONParser parser = new JSONParser(); 
    JSONObject json = null; 
    term = term.replaceAll(" ", "%20"); 

    try { 
     URL ob=new URL("http://api.duckduckgo.com/?q=" + term + "&format=json&pretty=0"); 
     HttpURLConnection con=(HttpURLConnection) ob.openConnection(); 
     con.setRequestMethod("GET"); 
     con.setRequestProperty("USER_AGENT", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11"); 

     BufferedReader br = new BufferedReader((new InputStreamReader(con.getInputStream()))); 
     json = (JSONObject) parser.parse(br.readLine()); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    return json; 
} 

내가 그것을 얻이 수없는 것 일하다. 나는 identofy를 일반 브라우저로 읽어야한다고 읽었지만, 내가 잘못하고있는 것을 보지 못했다. 어떤 도움이 필요합니까?

+0

으로 확인합니다. 나는 똑같은 오류가있다. 더 디버깅하려고합니다. – blackpen

+0

나는 실수없이 그것을 끝냈다. 이제 반환 된 JSONObject에 데이터가 있는지 확인하려고합니다. – blackpen

+0

나는 일하는 빠르고/더러운 코드를 조합했다. 나는 몇 분 안에 게시 할 예정이다 – blackpen

답변

1

나는 HttpURLConnection과 함께 403 (당신과 동일)을 얻었습니다. 하지만 HttpURLConnection 대신 URLConnection을 사용했을 때 작동했습니다. 빠른 가용성 덕분에 방금 org.json.simple 파서를 사용했습니다. JSON 객체는 파싱 된 데이터를 마지막에 출력했다.

import java.io.*; 
import java.net.*; 
import java.util.*; 

import org.json.simple.*; 
import org.json.simple.parser.*; 

public class HelloWorld{ 

    public static void main(String []args){ 

    try { 
     JSONParser parser = new JSONParser(); 
     JSONObject json = null; 
     URL url = new URL("http://api.duckduckgo.com/?q=science&format=json&pretty=0"); 
     URLConnection conn = url.openConnection(); 
     conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB;  rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 (.NET CLR 3.5.30729)"); 

     Scanner scn = new Scanner(conn.getInputStream()).useDelimiter("\\A"); 
     String buffer = scn.hasNext() ? scn.next() : ""; 
     json = (JSONObject) parser.parse(buffer); 
     System.out.println(json.toString()); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
} 
+0

글쎄, 403 고쳐 주셔서 고마워,하지만 어떻게 실제 정보를 얻을 수 있습니까? 내가 말할 수있는 것은 http://pastebin.com/EsVv8JTh –

+0

@coolnickname입니다. 파싱 된 json 객체가 있습니다 (Map/HashMap과 같습니다). 당신은 그것의 방법을 사용하여 더 많은 정보에 접근 할 수 있습니다. 네가 뭘 찾고 있었지? 출력물을 더 잘 이해하고 싶다면 예쁜 인쇄물을 사용해보십시오. (귀뚜라미가 한 장의 출력물을 출력하는 자유로운 사이트를 사용할 수도 있습니다.) – blackpen

+0

2017-03-21 현재 미터링/제한은 없지만 결과를 얻기 위해 클라이언트를 일관되게 식별해야합니다 ... 아래 라인 : conn.setRequestProperty ("User-Agent", "ClientName"); ' 포함하는 URL의 "& t = ClientName"매개 변수와 일치해야합니다. Java에서 나를 위해 일한 예제는 다음과 같습니다. http://api.duckduckgo.com/?format=json&pretty=1&t=ClientName&q=Elephant+and+Castle 사용자 에이전트가 없으면 HTTP 오류 코드 500, 에이전트와 "t"매개 변수가 일치하지 않으면 HTTP 301 및 공백 HTML 페이지에서 페이지가 main으로 리다이렉트되었음을 ​​알게됩니다. 또한 "q"매개 변수를 URL 인코딩하십시오. – bcmoney