在 Android 中编程 HTTP 请求

Programming HTTP Request in Android

使用 WireShark,我知道表单项有一个 'Key' / 'Value' 对用于搜索序列号。例如key=vsn,serial=p2x242334.

我如何为此编写一个 http 请求并取回要使用的内容?

我希望自动化一个非常繁琐的过程,即人们使用网络表单一次查看一个连续出版物,以查看是否为他们的一位客户创建了日志。

一般准则,我会弄清楚的。

谢谢!

尽管网络上有许多示例和 "tutorials" 显示了 HTTPUrlConnection 等太低级别的东西的使用,但到目前为止执行网络请求(REST 或其他方式)的最简单方法是 Retrofit 库。

网上有很多不错的 Retrofit 教程, 但基本上,您将创建一个描述您要发出的请求的接口,然后 Retrofit 将生成一个实现。

您的界面将如下所示:

public interface Api {
    @FormUrlEncoded
    @Post(“/search”)
    User search(@Field String key, @Field String serial);
}

然后就可以使用retrofit实现的方法进行异步请求了,像这样:

RestAdapter.Builder builder = new RestAdapter.Builder()
                .setEndpoint("http://example.com")
                .setClient(new OkClient(okHttpClient));

RestAdapter restAdapter = builder.build();

Api apiClient = restAdapter.create(Api.class);

apiClient.search("vsn", "p2x242334", new Callback<Response>() {
            @Override
            public void success(Response response) {
                // use the response
            }

            @Override
            public void failure(RetrofitError error) {
                // handle the error
            }
        });
 List<NameValuePair> f = new List<NameValuePair>();
 f.add(new BasicNameValuePair("key", "vsn"));
 HttpPost pr = new HttpPost(TheURL);
 pr.setEntity(new UrlEncodedFormEntity(f, "UTF-8"));
 HttpResponse Resp = new DefaultHttpClient().execute(pr);

只是不要在主线程上这样做,否则它会在 Android 3+ 上发生异常。