标签: androidhttpclient

用android发出HTTP请求

我到处搜索但我找不到答案,有没有办法发出简单的HTTP请求?我想在我的某个网站上请求PHP页面/脚本,但我不想显示该网页.

如果可能的话我甚至想在后台(在BroadcastReceiver中)这样做

android httpwebrequest androidhttpclient

347
推荐指数
9
解决办法
41万
查看次数

使用包含图像的Retrofit 2.0 POST多部分表单数据

我正在尝试使用Retrofit 2.0对服务器进行HTTP POST

MediaType MEDIA_TYPE_TEXT = MediaType.parse("text/plain");
MediaType MEDIA_TYPE_IMAGE = MediaType.parse("image/*");

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    imageBitmap.compress(Bitmap.CompressFormat.JPEG,90,byteArrayOutputStream);
profilePictureByte = byteArrayOutputStream.toByteArray();

Call<APIResults> call = ServiceAPI.updateProfile(
        RequestBody.create(MEDIA_TYPE_TEXT, emailString),
        RequestBody.create(MEDIA_TYPE_IMAGE, profilePictureByte));

call.enqueue();
Run Code Online (Sandbox Code Playgroud)

服务器返回错误,指出文件无效.

这很奇怪,因为我试图在iOS上使用相同的格式上传相同的文件(使用其他库),但它上传成功.

我想知道使用Retrofit 2.0上传图像的正确方法是什么?

在上传之前我应该​​先将它保存到磁盘吗?

谢谢!

PS:我已经将改造用于其他不包含图像的Multipart请求,并且已成功完成.问题是当我试图在主体中包含一个字节时.

android androidhttpclient retrofit retrofit2

131
推荐指数
7
解决办法
17万
查看次数

如何在Android模拟器中连接localhost?

我在localhost中创建了一个php脚本,我正在连接它,httpClient但是我遇到了问题.

请告诉我如何从模拟器连接到localhost的php文件?

localhost httpconnection android-emulator androidhttpclient

99
推荐指数
7
解决办法
6万
查看次数

获取NoSuchFieldError INSTANCE org/apache/http/message/BasicHeaderValueParser

我正在研究Android上的应用.我正在使用httpcore 4.3.3.我尝试使用时会得到这个ContentType.parse(string)

java.lang.NoSuchFieldError: No static field INSTANCE of type Lorg/apache/http/message/BasicHeaderValueParser; in class Lorg/apache/http/message/BasicHeaderValueParser; or its superclasses (declaration of 'org.apache.http.message.BasicHeaderValueParser' appears in /system/framework/ext.jar)
Run Code Online (Sandbox Code Playgroud)

我做了一些谷歌搜索,我理解为什么我得到错误,但我不确定如何解决它.从我读过的内容来看,似乎ContentType试图利用Android附带的BasicHeaderValueParser,而该类还没有INSTANCE字段.有什么帮助吗?

这些是相关的进口:

compile('org.apache.httpcomponents:httpmime:4.3.6') {
    exclude module: 'httpclient'
}
compile 'org.apache.httpcomponents:httpcore:4.3.3'
Run Code Online (Sandbox Code Playgroud)

android apache-httpclient-4.x androidhttpclient

27
推荐指数
1
解决办法
2万
查看次数

Retrofit 2.0-beta-2正在为MultiPart值添加文字引号

我们升级到Retrofit 2.0并遇到了这个奇怪的问题.

我有一个方法来记录用户

public interface ApiInterface {

    @Multipart
    @POST("user/login/")
    Call<SessionToken> userLogin(@Part("username") String username, @Part("password") String password);
}
Run Code Online (Sandbox Code Playgroud)

当我查看服务器端的键值POST params时,它们就像这样打印

username : "brian"
password : "password"
Run Code Online (Sandbox Code Playgroud)

使用改造1.9的相同方法K:V对看起来像

username : brian
password : password
Run Code Online (Sandbox Code Playgroud)

它正在为POST变量添加文字引号

如果我使用任何其他休息客户端,变量打印就像没有引号的第二种方式.

以下是我使用拦截器构建Retrofit实例的方法

 OkHttpClient client = new OkHttpClient();
    client.interceptors().add(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request original = chain.request();

            // Customize the request
            Request request = original.newBuilder()
                    .header("Accept", "application/json")
                    .header("Authorization", myPrefs.accessToken().getOr(""))
                    .method(original.method(), original.body())
                    .build();

            Response response = chain.proceed(request);

            // Customize or return the response …
Run Code Online (Sandbox Code Playgroud)

httpclient androidhttpclient retrofit okhttp

25
推荐指数
3
解决办法
4611
查看次数

使用Android Retrofit进行POST

我是Android编程的新手,也在使用Retrofit.我已就这个主题做了大量研究,但未能找到特定于我需求的解决方案.我正在使用我们的API并尝试发出POST请求.我使用以下非Retrofit代码成功实现了此目的:

    private class ProcessLogin extends AsyncTask<Void, String, JSONObject> {
    private ProgressDialog pDialog;
    String email,password;

    protected void onPreExecute() {
        super.onPreExecute();
        inputEmail = (EditText) findViewById(R.id.email);
        inputPassword = (EditText) findViewById(R.id.password);
        email = inputEmail.getText().toString();
        password = inputPassword.getText().toString();
        pDialog = new ProgressDialog(LoginActivity.this);
        pDialog.setTitle("Contacting Servers");
        pDialog.setMessage("Logging in ...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    protected JSONObject doInBackground(Void... params) {
        HttpURLConnection connection;
        OutputStreamWriter request = null;
        URL url = null;   
        String response = null;         
        String parameters = "username="+email+"&password="+password;  
        try
        {
            url = new URL("http://.../api/login");
            connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true); …
Run Code Online (Sandbox Code Playgroud)

android android-networking android-asynctask androidhttpclient retrofit

23
推荐指数
2
解决办法
5万
查看次数

为什么我应该使用OkHttp而不是android httpClient和AsyncTask

在SpeakerDeck(https://speakerdeck.com/pareshmayani/lazy-android-developers-be-productive)的Paresh Mayani演讲中,他说最好使用OkHttpRetrofit代替AsyncTask使用DefaultHttpClient.

我的问题是为什么?
为什么他们更快?
那些也是基于默认android类的库吗?
OkHttp和Retrofit有什么区别?

谢谢!

android android-networking androidhttpclient retrofit okhttp

20
推荐指数
1
解决办法
1万
查看次数

为什么android会得到错误的ssl证书?(两个域,一个服务器)

我有两个域:foo.netbar.com.它们都具有SSL证书,并且在所有桌面和移动浏览器中都能很好地运行.它们托管在使用nginx配置的同一台服务器上.

但是,当我从本机Android应用程序中向域发出请求时,它会以某种方式从错误的域获取证书!这会导致IO异常:

request = new HttpPost("https://foo.net/api/v1/baz");
request.setHeader("Authorization", "user:pass");
response = httpClient.execute(request);
Run Code Online (Sandbox Code Playgroud)

...

javax.net.ssl.SSLException: hostname in certificate didn't match: <foo.net> != <bar.com> OR <bar.com> OR <www.bar.com>

什么会导致android/java尝试使用证书bar.com时,其他每个措施似乎表明服务器配置正确?nginx访问或错误日志中没有任何内容.bar.com在我的android项目中没有提到任何地方.

编辑:我不知道为什么,但似乎服务器正在使用证书为bar.com服务器IPhttps://198.245.xx.xxx

ssl android nginx androidhttpclient

17
推荐指数
1
解决办法
1万
查看次数

OKhttp PUT示例

我的要求是使用PUT,发送标题和正文到服务器,它将更新数据库中的内容.

我刚刚阅读了okHttp文档,我试图使用他们的POST示例,但它不适用于我的用例(我认为这可能是因为服务器要求我使用PUT而不是POST).

这是我的方法POST:

 public void postRequestWithHeaderAndBody(String url, String header, String jsonBody) {


        MediaType JSON = MediaType.parse("application/json; charset=utf-8");
        RequestBody body = RequestBody.create(JSON, jsonBody);

        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .addHeader("Authorization", header)
                .build();

        makeCall(client, request);
    }
Run Code Online (Sandbox Code Playgroud)

我试图搜索okHttp示例使用PUT没有成功,如果我需要使用PUT方法是否还有使用okHttp?

我正在使用okhttp:2.4.0(以防万一),感谢任何帮助!

android android-networking androidhttpclient retrofit okhttp

17
推荐指数
2
解决办法
1万
查看次数

Android - MultipartEntity和依赖项

我最近将我的项目从Eclipse迁移到Android Studio(我还没有完全控制这个IDE).在这个项目中,我有一个文件上传器AsyncTask,它通过http发送multipart.为此,我使用org.apache.httpcomponents.我创建了以下依赖项:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'org.apache.httpcomponents:httpcore:4.4'
    compile 'org.apache.httpcomponents:httpmime:4.4'
    ...
}
Run Code Online (Sandbox Code Playgroud)

在我的java AsyncTask代码中:

MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addBinaryBody(...);
builder.addBinaryBody(...);
builder.addBinaryBody(...);
HttpEntity entity = builder.build(); // < throw exception
Run Code Online (Sandbox Code Playgroud)

我在启动上传时获得的异常:

Caused by: java.lang.NoSuchFieldError: org.apache.http.message.BasicHeaderValueFormatter.INSTANCE
    at org.apache.http.entity.ContentType.toString(ContentType.java:153)
    at org.apache.http.entity.mime.MultipartFormEntity.<init>(MultipartFormEntity.java:52)
    at org.apache.http.entity.mime.MultipartEntityBuilder.buildEntity(MultipartEntityBuilder.java:226)
    at org.apache.http.entity.mime.MultipartEntityBuilder.build(MultipartEntityBuilder.java:230)
Run Code Online (Sandbox Code Playgroud)

我认为android.jar > httpcomponentsorg.apache.httpcomponents依赖之间存在冲突但我没有找到解决问题的解决方案.

android androidhttpclient android-studio

16
推荐指数
2
解决办法
4万
查看次数