1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/HttpNet

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Проект HttpNet имеет следующую структуру:

HttpNet — это сетевой запросный фреймворк, основанный на HttpUrlConnection. Он использует модель запроса Client + Request + Call и поддерживает HTTPS CA аутентификацию или самоподписанный сертификат. Также поддерживается синхронный и асинхронный методы, Rxjava, загрузка и скачивание с прослушиванием. Синхронные запросы легко сочетаются с RxJava для переключения потоков.

Если вы разрабатываете приложение для Android, то рекомендуется использовать Elegant — новый опыт разработки для Android, который основан на HttpNet. Его сетевой модуль запросов использует динамический прокси и идею построения, отдавая дань уважения Retrofit!

Gradle

compile 'com.haibin:httpnet:1.1.5'

RxJava и прерывистая загрузка

final File rangeFile = new File(Environment.getExternalStorageDirectory().getPath() + "/cnblogs.apk");
final long readySize = rangeFile.exists() ? rangeFile.length() : 0;
Headers.Builder headers = new Headers.Builder()
                .addHeader("Range", "bytes=" + readySize + "-");
Request request = new Request.Builder()
          .url("http://f1.market.xiaomi.com/download/
                AppStore/0117653278abecee8762883a940e129e9d242ae7d/com.huanghaibin_dev.cnblogs.apk")
           .headers(headers)
           .build();
callDownload = client.newCall(request);//调用callDownload.cancel();取消请求实现暂停,再次请求即可从断点位置继续下载
Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> e) throws Exception {
                try {
                    Response response = callDownload.execute();
                    InputStream is = response.toStream();
                    RandomAccessFile randomAccessFile = new RandomAccessFile(rangeFile, "rw");
                    randomAccessFile.seek(readySize);
                    int length = response.getContentLength();
                    length += readySize;
                    int p = (int) readySize;
                    int bytes;
                    byte[] buffer = new byte[1024];
                    while ((bytes = is.read(buffer)) != -1) {
                        randomAccessFile.write(buffer, 0, bytes);
                        p += bytes;
                        e.onNext(String.valueOf((p / (float) length) * 100));
                    }
                    response.close();
                } catch (Exception error) {
                    error.printStackTrace();
                    e.onError(error);
                }
            }
        }).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<String>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(String value) {
                        text.setText(value);
                        float f = Float.parseFloat(value);
                        progressBar.setProgress((int) f);
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });

##RxJava и синхронная загрузка с прослушиванием:

final Request request = new Request.Builder()
                .url("http://upload.cnblogs.com/ImageUploader/TemporaryAvatarUpload")
                .method("POST")
                .params(new RequestParams()
                        .putFile("qqfile", "/storage/emulated/0/DCIM/Camera/339718150.jpeg"))
                .headers(new Headers.Builder().addHeader("Cookie", "CNZZDATA1259029673=2072545293-1479795067-null%7C1479795067; lhb_smart_1=1; __utma=226521935.1789795872.1480996255.1480996255.1480996255.1; __utmz=226521935.1480996255.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; .CNBlogsCookie=A6783E37E1040979421EC4A57A2FEFBB74B65BB51C7345AC99B64A7065293F59A79C6830C60D71629E8D28A332436E23CD40968EB58AA830CBD0F0733438F9A7627C074DB0462C2576D206D3752E640871E8CB23D1A50B0A9962C158466EE81425B1E516; _gat=1; _ga=GA1.2.1789795872.1480996255"))
                .build();
        Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(final ObservableEmitter<String> e) throws Exception { **Синхронная загрузка с использованием RxJava и мониторинг процесса:**

client.newCall(request) .intercept(new InterceptListener() { @Override public void onProgress(int index, long currentLength, long totalLength) { Log.e("file", index + " -- " + " -- " + currentLength + " -- " + totalLength); e.onNext(index + " -- " + " -- " + currentLength + " -- " + totalLength); } }) .execute();


**RxJava для синхронной загрузки с мониторингом процесса:**

Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(ObservableEmitter e) throws Exception { callDownload = client.newCall("http://f3.market.xiaomi.com/download/AppStore/0b3f6b4e06ff14b61065972a96149da822c86ad40/com.eg.android.AlipayGphone.apk"); Response response = callDownload.execute(); InputStream is = response.toStream(); File file = new File(Environment.getExternalStorageDirectory().getPath() + "/alipay.apk"); FileOutputStream os = new FileOutputStream(file); int length = response.getContentLength(); int p = 0; int bytes; byte[] buffer = new byte[1024]; while ((bytes = is.read(buffer)) != -1) { os.write(buffer, 0, bytes); p += bytes; e.onNext(String.valueOf((p / (float) length) * 100)); } response.close(); } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer() { @Override public void accept(String s) throws Exception { text.setText(s); float f = Float.parseFloat(s); progressBar.setProgress((int) f); } });


*Примечание: в тексте запроса есть фрагменты кода на языке Java.*

**Поддержка HTTPS CA аутентификации:**

По умолчанию поддерживается HTTPS CA аутентификация. Если используется самоподписанный сертификат, то перед выполнением запроса необходимо использовать один из следующих методов:

```java
client.setSslSocketFactory(getAssets().open("12306.cer"));//сертификат в виде потока ввода
client.setSslSocketFactory("filepath/12306.cer");//путь к сертификату
client.setSslSocketFactoryAsString("cerValue");//текст сертификата

Для добавления нескольких сертификатов можно использовать следующий способ:

InputStream is12306 = getAssets().open("12306.cer");
InputStream isGoogle = getAssets().open("google.cer");
client.setSslSocketFactory(is12306 , isGoogle );

После добавления сертификата клиент не сможет получить доступ к другим ссылкам, которые не используют HTTPS. Можно создать новый экземпляр HttpNetClient и задать новые ссылки.

GET асинхронный запрос:

Request request = new Request.Builder()
                .encode("UTF-8")
                .method("GET")
                .timeout(13000)
                .proxy("192.168.1.1",80) //поддержка HTTP прокси
                .url("https://kyfw.12306.cn/otn/")
                .build();

POST асинхронный запрос:

RequestParams params = new RequestParams()
                .put("userName","oscer")
                .putFile("fileName","file")
                .put("pwd","oschina");
Request request = new Request.Builder()
                .encode("UTF-8")
                .method("POST")
                .params(params)
                .timeout(13000)
                .url("http://www.oschina.net")
                .build();

POST JSON запрос:

Request request = new Request.Builder()
                .encode("UTF-8")
                .method("POST")
                .content(new
``` ##Выполнение запроса:
```java

HttpNetClient client = new HttpNetClient();

client.setProxy("192.168.1.1",80);//Вы также можете включить глобальный прокси для этого клиента

client.newCall(request)
                //Если используется метод загрузки файла, здесь можно включить мониторинг прогресса загрузки
                .intercept(new InterceptListener() {
                    @Override
                    public void onProgress(final int index, final long currentLength, final long totalLength) {
                        Log.e("Текущий прогресс", "  --  " + ((float) currentLength / totalLength) * 100);
                    }
                })
                .execute(new Callback() {
                    @Override
                    public void onResponse(Response response) {
                        String body = response.getBody();
                        InputStream is = response.toStream();//Если используется загрузка, здесь можно отслеживать прогресс загрузки
                    }

                    @Override
                    public void onFailure(Exception e) {
                            Log.e("onFailure", " onFailure " + e.getMessage());
                    }
                });

##Лицензии

  • Copyright (C) 2013 huanghaibin_dev huanghaibin_dev@163.com

  • Лицензия Apache, версия 2.0 («Лицензия»);

  • Вы не можете использовать этот файл, кроме как в соответствии с Лицензией.

  • Вы можете получить копию Лицензии по адресу:

  • http://www.apache.org/licenses/LICENSE-2.0

  • Если это не требуется применимым законодательством или не согласовано в письменной форме, программное обеспечение,

  • распространяемое в рамках Лицензии, распространяется на условиях «КАК ЕСТЬ»,

  • БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ ЛЮБОГО РОДА, явных или подразумеваемых.

  • См. Лицензию для конкретного языка, регулирующего разрешения и ограничения в рамках Лицензии.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

*А HttpNetClient for Java or Android.* *На основе Java — родной Http-клиент.* Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/HttpNet.git
git@api.gitlife.ru:oschina-mirror/HttpNet.git
oschina-mirror
HttpNet
HttpNet
master