从谷歌服务器验证谷歌文档后,我做了一个简单的getResponse,但我收到400错误请求。我无法理解我哪里出错了。示例代码位于
下面 private void executeRefreshAlbums() {
HttpRequest request = transport.buildGetRequest();
request.url = GoogleDocsUrl.forDefaultPrivateFull();
System.out.println("URL = "+request.url);
try {
HttpResponse response = request.execute();
System.out.println("Response = "+response.getContent());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
sysout将正确的URL打印为
03-12 17:36:59.573: INFO/System.out(451): URL = https://docs.google.com/feeds/default/private/full
但是当我这样做时,我得到了
03-12 17:43:41.360: WARN/System.err(3958): com.google.api.client.http.HttpResponseException: 400 Bad Request
03-12 17:43:41.415: WARN/System.err(3958): at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:209)
03-12 17:43:41.415: WARN/System.err(3958): at com.example.Test.executeRefreshAlbums(Test.java:198)
03-12 17:43:41.415: WARN/System.err(3958): at com.example.Test.authenticated(Test.java:190)
03-12 17:43:41.415: WARN/System.err(3958): at com.example.Test.authenticatedClientLogin(Test.java:156)
03-12 17:43:41.415: WARN/System.err(3958): at com.example.Test.access$1(Test.java:153)
03-12 17:43:41.415: WARN/System.err(3958): at com.example.Test$2$1.run(Test.java:139)
03-12 17:43:41.415: WARN/System.err(3958): at android.os.Handler.handleCallback(Handler.java:587)
03-12 17:43:41.415: WARN/System.err(3958): at android.os.Handler.dispatchMessage(Handler.java:92)
03-12 17:43:41.415: WARN/System.err(3958): at android.os.Looper.loop(Looper.java:123)
03-12 17:43:41.415: WARN/System.err(3958): at android.app.ActivityThread.main(ActivityThread.java:4363)
03-12 17:43:41.415: WARN/System.err(3958): at java.lang.reflect.Method.invokeNative(Native Method)
03-12 17:43:41.415: WARN/System.err(3958): at java.lang.reflect.Method.invoke(Method.java:521)
03-12 17:43:41.422: WARN/System.err(3958): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
03-12 17:43:41.422: WARN/System.err(3958): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
03-12 17:43:41.422: WARN/System.err(3958): at dalvik.system.NativeStart.main(Native Method)
任何帮助都会非常感激。我现在已经尝试了一个小时了: - (
答案 0 :(得分:2)
在另一个线程用户@Merlin provided解决类似问题的解决方案。他的解决方案是在请求中指定API版本号3.0,如“Google Documents List Data API”文档中所述:
重要:如果您向仅使用功能的API发出请求 在版本3中可用,但忘记设置版本,您将最多 可能会收到 400错误请求回复。由于URL结构是 在版本2和版本3之间有所不同,这是一个常见的错误 API的新用户。
要指定版本号,请使用
GData-Version
HTTP标头。此标头的值必须为3.0
。该 十进制和零是必需的。
GData-Version: 3.0
可替换地, 您可以在网址中指定
v=3
作为查询参数。这通常是 在阻止HTTP标头的防火墙后面工作时需要,或者 来自一些JavaScript请求。建议使用HTTP标头 如果可能。
答案 1 :(得分:0)
不确定您使用的transport
对象是什么;
这是一个简单的HttpGet请求:
HttpGet getMethod = new HttpGet(URI);
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 30000);
HttpConnectionParams.setSoTimeout(params, 30000);
DefaultHttpClient httpClient = new DefaultHttpClient(params);
HttpResponse response = httpClient.execute(getMethod);
BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
String returnString = "";
String line = "";
do
{
returnString += line;
line = in.readLine();
} while (line != null);
也许使用这种方法会产生更明显的错误?