2011-02-08 36 views
19

Tôi đang cố gắng kết nối với URL từ ứng dụng dành cho máy tính để bàn và tôi nhận được lỗi được nêu trong Tiêu đề câu hỏi của tôi, nhưng khi tôi cố gắng kết nối với cùng một URL từ servlet, tất cả đều hoạt động tốt. Khi tôi tải URL từ trình duyệt, tất cả đều hoạt động tốt. Tôi đang sử dụng cùng một mã trong servlet. Mã đã ở trong một thư viện, khi nó không hoạt động, tôi rút mã ra một lớp trong dự án hiện tại, nhưng nó không hoạt động.Lỗi kết nối URL - java.io.IOException: Máy chủ trả về mã phản hồi HTTP: 400 cho URL

URL https://graph.facebook.com/me.

Đoạn mã.

public static String post(String urlSpec, String data) throws Exception { 
    URL url = new URL(urlSpec); 
    URLConnection connection = url.openConnection(); 
    connection.setDoOutput(true); 
    OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); 
    writer.write(data); 
    writer.flush(); 

    BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
    String line = ""; 
    StringBuilder builder = new StringBuilder(); 
    while((line = reader.readLine()) != null) { 
     builder.append(line); 
    } 
    return builder.toString(); 
} 

Tôi hơi bối rối ở đây, có điều gì đó hiện diện là servlet không phải là ứng dụng dành cho máy tính để bàn thông thường không?

Cảm ơn.

ĐẦY ĐỦ Stack Trace

Feb 8, 2011 9:54:14 AM com.trinisoftinc.jiraffe.objects.FacebookAlbum create 
SEVERE: null 
java.io.IOException: Server returned HTTP response code: 400 for URL: https://graph.facebook.com/me 
     at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1313) 
     at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234) 
     at com.jiraffe.helpers.Util.post(Util.java:49) 
     at com.trinisoftinc.jiraffe.objects.FacebookAlbum.create(FacebookAlbum.java:211) 
     at com.trinisoftinc.jiraffe.objects.FacebookAlbum.main(FacebookAlbum.java:261) 
+0

Tôi nghi ngờ Https có thể gây ra sự cố. Nhưng cung cấp cho stacktrace ngoại lệ đầy đủ của bạn – Bozho

Trả lời

4

Cuối cùng tôi đã tìm thấy sự cố. Tất nhiên đó là mã của tôi. Một phần của mã tôi không đăng là giá trị của dữ liệu. dữ liệu chỉ được chứa tên và mô tả nhưng tôi chuyển nhiều hơn tên và mô tả.

50

EDIT: Bạn cần phải tìm được thông báo lỗi chính xác mà facebook đang gửi trong phản ứng Bạn có thể thay đổi mã của bạn để nhận được thông báo từ các dòng lỗi như vậy:

HttpURLConnection httpConn = (HttpURLConnection)connection; 
InputStream is; 
if (httpConn.getResponseCode() >= 400) { 
    is = httpConn.getErrorStream(); 
} else { 
    is = httpConn.getInputStream(); 
} 

Hãy xem làm thế nào bạn đang đi qua bối cảnh người dùng Dưới đây là một số thông tin có thể giúp bạn ra ngoài:

Nhìn vào thông báo lỗi đằng sau mã 400 đáp ứng:

"Facebook Platform" "invalid_request" "Một thẻ truy cập hoạt động phải được sử dụng để truy vấn thông tin về người dùng hiện tại *

Bạn sẽ tìm thấy giải pháp here

 
HTTP/1.1 400 Bad Request 
... 
WWW-Authenticate: OAuth "Facebook Platform" "invalid_request" "An active access token must be used to query information about the current user." 
... 
+0

Tôi đang đi qua cùng một mã thông báo như tôi đang đi trong Servlet. Tôi chắc chắn mã thông báo là đúng coz Tôi đã sử dụng nó để tải URL trên trình duyệt. Tôi đánh giá cao bình luận của bạn mặc dù. Tôi đang nghĩ rằng có lẽ facebook xử lý các yêu cầu Desktop và Web Apps khác nhau, hoặc một cái gì đó tương tự. –

+0

đã cập nhật câu trả lời; bạn nên nhìn vào luồng lỗi để nhận được thông báo chính xác được gửi tới bạn bằng dịch vụ facebook –

+1

@RyanFernandes nó phải ngược lại: nếu (httpConn.getResponseCode()> = 400) { là = httpConn.getErrorStream(); } else { is = httpConn.getInputStream(); } – Pashok

Các vấn đề liên quan