Страницы

Поиск по вопросам

Показаны сообщения с ярлыком request. Показать все сообщения
Показаны сообщения с ярлыком request. Показать все сообщения

воскресенье, 29 марта 2020 г.

Как через python отправить request?

#python #request


У меня есть вот это curl -X POST https://trace.moe/api/search -H "Content-Type: application/json"
-d '{ "image" : "'$(base64 -w 0 your_search_image.jpg)'" }'
Как это можно отправить через python?
    


Ответы

Ответ 1



На Python3 можно примерно вот так import requests data = { "image": 'Твоё изображение' } url = 'https://trace.moe/api/search' response = requests.post(url, json=data) print (response.json())

четверг, 23 января 2020 г.

С какого запроса следует начинать авторизацию на DropBox?

#http #https #oauth #request #dropbox


Доброго времени суток, уважаемые форумчане!

Изучаю документацию по протоколу Oauth 1.0 для DropBox, но не могу понять, с какого
запроса следует начинать сеанс обращения к серверу DropBox. В документации написано,
что первый запрос должен содержать следующие параметры:


  
  oauth_consumer_key: The Consumer Key.
  oauth_signature_method:
  The signature method the Consumer used to sign the request.
  oauth_signature:
  The signature as defined in Signing Requests.
  oauth_timestamp:
  As defined in Nonce and Timestamp.
  oauth_nonce:
  As defined in Nonce and Timestamp.
  oauth_version:
  OPTIONAL. If present, value MUST be 1.0 . Service Providers MUST assume the protocol
version to be 1.0 if this parameter is not present. Service Providers’ response to
non-1.0 value is left undefined.
  Additional parameters:
  Any additional parameters, as defined by the Service Provider.
  


Для вычисления подписи предлагается использовать PLAINTEXT, HMAC-SHA1 или RSA-SHA1.
Методом PLAINTEXT ничего не получилось, как не пыталась отправлять запросы, сервер
всё время возвращал ошибку "Not authorized".

Решила попробовать создавать подпись с помощью HMAC-SHA1, но не понятно, что будет
являться входным параметром, а что ключом. Подскажите ещё, пожалуйста, какой нужно
отправлять метод: POST или GET, куда передавать параметры: в строку запроса или в тело
запроса?

Ссылка на рефы DropBox: http://oauth.net/core/1.0/#signing_process

Пример:

    wstring url = L"https://www.dropbox.com/home/request_token";
    wstring oauth_nonce;
    CreateRequestParam(oauth_nonce);
    wstring oauth_callback = L"";
    wstring oauth_consumer_key = L"my App key";
    wstring oauth_consumer_secret = L"my App secret";
    wstring oauth_signature_method = L"PLAINTEXT";
    wstring oauth_timestamp = to_wstring(*(double*)time);
    wstring oauth_version = L"1.0";
    wstring oauth_signature = oauth_consumer_secret + L"&";
    wstring params = L"oauth_consumer_key=" + oauth_consumer_key +
                     L"&oauth_signature_method=" + oauth_signature_method +
                     L"&oauth_signature=" + oauth_signature +
                     L"&oauth_timestamp=" + oauth_timestamp +
                     L"&oauth_nonce=" + oauth_nonce +
                     L"&oauth_version=" + oauth_version;

    int err = PostRequest(url, params);


На указанный url отправляю HTTP POST запрос, в теле передаю параметры, указанные
выше. Должны возвращаться out_token и outh_secret, но возвращается страница в html-формате,
в которой нет ни того, ни другого. Что я делаю не так?
    


Ответы

Ответ 1



Не знаю, актуален ли еще вопрос, попробую ответить. Первый запрос на адрес https://api.dropbox.com/1/oauth/request_token Пример: POST https://api.dropbox.com/1/oauth/request_token HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0 Host: api.dropbox.com Accept: */* Accept-Encoding: deflate, gzip Authorization: OAuth oauth_consumer_key="973quph3jxdgqoe",oauth_nonce="105816471209",oauth_signature="wloizpn331cc8zd&",oauth_signature_method="PLAINTEXT",oauth_timestamp="Wed%2C%2013%20May%202015%2015%3A37%3A53%20%2B0000",oauth_version="1.0" Content-Length: 0 Content-Type: application/x-www-form-urlencoded В ответ получаете oauth_token HTTP/1.1 200 OK Server: nginx Date: Wed, 13 May 2015 15:46:32 GMT Content-Type: application/x-www-form-urlencoded ... Content-Length: 64 oauth_token_secret=LZl8HyVRQuP1ifON&oauth_token=RS4XReiBykw8WHNz Затем отправляете пользователя в браузер на страничку https://www.dropbox.com/1/oauth/authorize?oauth_token=RS4XReiBykw8WHNz Пользователь нажимает кнопочку Allow. Затем выполняете запрос на второй URL (подписываете его уже с использованием полученного ранее oauth_token_secret: https://api.dropbox.com/1/oauth/access_token POST https://api.dropbox.com/1/oauth/access_token HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0 Host: api.dropbox.com Accept: */* Accept-Encoding: deflate, gzip Authorization: OAuth oauth_consumer_key="973quph3jxdgqoe",oauth_nonce="847334669",oauth_signature="wloizpn331cc8zd&LZl8HyVRQuP1ifON",oauth_signature_method="PLAINTEXT",oauth_timestamp="Wed%2C%2013%20May%202015%2015%3A46%3A46%20%2B0000",oauth_token="RS4XReiBykw8WHNz",oauth_version="1.0" Content-Length: 0 Content-Type: application/x-www-form-urlencoded И получаете в ответ токен, который будете использовать при последующих запросах: HTTP/1.1 200 OK Server: nginx Date: Wed, 13 May 2015 15:46:55 GMT Content-Type: application/x-www-form-urlencoded Connection: keep-alive ... Content-Length: 76 oauth_token_secret=32mdalirxxxxa8j&oauth_token=yx8f9rdxxxxj8dia&uid=1921xxxx Пример авторизации на Dropbox Пример OAuth авторизации на Flickr с подписыванием запроса HMAC-SHA1

четверг, 2 января 2020 г.

В чём отличие между классами HttpRequest и HttpWebRequest C#

#c_sharp #веб_программирование #http #https #request


Здравствуйте, подскажите, пожалуйста, какой класс лучше использовать для отправки
POST и GET запросов по протоколам HTTP и HTTPS? В чём разница между указанными двумя
классами? Необходимы возможности установки headers вручную.
    


Ответы

Ответ 1



Самое важное отличие вам и не сказали... HttpRequest - это представление запроса на стороне сервера в ASP.NET. HttpWebRequest - это представление запроса на стороне клиента. Поскольку вы пишите клиент, а не сервер - выбор очевиден :)

Ответ 2



HttpRequest это приблуда ASP.NET, работает с конкретным текущим запросом и "просто существует". HttpWebRequest это класс для отправки запросов HTTP(S) любым методом, с любыми заголовками и прочим, это как раз что вам надо. Не очевидное место: HttpWebRequest создается через WebRequest.Create который возвращает WebRequest, просто надо скастовать его к HttpWebRequest (если запрос http://), тогда будут доступны все свойства, заголовки и т.п.

вторник, 24 декабря 2019 г.

Как вернуть мета информацию из HEAD запроса используя Retrofit2?

#android #retrofit #header #request


Для взаимодействия с сервером использую ретрофит. Есть GET запрос который возвращает
огромное кол-во данных. Чтобы каждый раз не съедать трафик клиента нужно проверять
обновились ли данные га сервере. Для этого использую HEAD запрос к тому же эндпоинту.
Проблема в том что HEAD запрос в Call<> можно положить только Void иначе выкидывает
эксепшен. А при таком запросе в колбэк ничего не возвращается, так как у этого запроса
нет респонса. Немного погуглив я нашел способ все же получить нужную мне метаинформацю
из хедеров в Interceptor.

chain.proceed(request).header("etag"))

Но тут меня настигла очередная проблема, как без колбэка передать этот "етаг" туда
откуда был сделан реквест? Должен же быть какой нибудь адекватный/элегантный способ?
    


Ответы

Ответ 1



Retrofit2 корректно возвращает респонс в коллбек при HEAD запросах. Данный код у меня отлично работает: Call c = service.headRequest(url); c.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { response.headers(); } @Override public void onFailure(Call call, Throwable t) { } }); response не пустой и содержит в себе хедэры response.headers(). Если в вашем случае это не работает, то возможно, что проблема в сервере, который некорректно обрабатывает HEAD запросы.

воскресенье, 7 июля 2019 г.

Выполнить сортировку html таблицы до получения html кода

Получаю данные по этой ссылке. Код на python. Также использую библиотеку BeautifulSoup для последующей обработки HTML кода.
Как мне, перед получением HTML кода страницы, выполнить сортировку таблицы на сайте, например по цене?
url = 'https://coinmarketcap.com/currencies/bitcoin/#markets' html = requests.get(url).text data = get_data(html)


Ответ

Можно воспользоваться модулем Pandas
import pandas as pd
url = 'https://coinmarketcap.com/currencies/bitcoin/#markets' df = pd.read_html(url)[0]
res = (df.assign(pr_num=lambda x: pd.to_numeric(x['Price'].str.replace(r'[\$,\s\*]',''), errors='coerce')) .sort_values('pr_num', ascending=False))
результат:
In [268]: print(res) # Source Pair Volume (24h) Price Volume (%) Updated pr_num 353 354 CoinExchange CUBE/BTC $1,568,170 $13064.30 0.03% Recently 13064.30 13 14 BTCC BTC/USD $58,216,900 $7630.00 1.25% Recently 7630.00 224 225 LakeBTC BTC/USD $3,144,690 $7144.04 0.07% Recently 7144.04 251 252 Bitinka BTC/ARS $2,599,470 $7087.53 0.06% Recently 7087.53 170 171 BCEX NAS/BTC $4,433,300 $7057.71 0.09% Recently 7057.71 .. ... ... ... ... ... ... ... ... 280 281 Bit-Z XAS/BTC $2,230,820 $6297.18 0.05% Recently 6297.18 279 280 BtcTrade.im ETC/BTC $2,270,590 $6287.73 0.05% Recently 6287.73 291 292 OKEx OF/BTC $2,112,840 $6278.22 0.05% Recently 6278.22 369 370 Hotbit BZNT/BTC $1,453,500 $6272.91 0.03% Recently 6272.91 193 194 BCEX ANS/BTC $3,664,540 $5950.85 0.08% Recently 5950.85
[400 rows x 8 columns]
если нужен HTML:
res.to_html(r'c:/temp/res.html')
результат для первых 10 строк:

# Source Pair Volume (24h) Price Volume (%) Updated pr_num
353 354 CoinExchange CUBE/BTC $1,568,170 $13064.30 0.03% Recently 13064.30
13 14 BTCC BTC/USD $58,216,900 $7630.00 1.25% Recently 7630.00
224 225 LakeBTC BTC/USD $3,144,690 $7144.04 0.07% Recently 7144.04
251 252 Bitinka BTC/ARS $2,599,470 $7087.53 0.06% Recently 7087.53
170 171 BCEX NAS/BTC $4,433,300 $7057.71 0.09% Recently 7057.71
223 224 BtcTrade.im LTC/BTC $3,146,020 $7044.13 0.07% Recently 7044.13
146 147 Bit-Z GXS/BTC $5,608,050 $6958.11 0.12% Recently 6958.11
385 386 LBank PNT/BTC $1,385,290 $6904.87 0.03% Recently 6904.87
264 265 Negocie Coins BTC/BRL $2,487,080 $6898.36 0.05% Recently 6898.36
387 388 Trade By Trade DASH/BTC $1,378,990 $6894.70 0.03% Recently 6894.70

PS чтобы удалить созданный столбец pr_num
res = res.drop('pr_num', axis=1)
In [272]: res Out[272]: # Source Pair Volume (24h) Price Volume (%) Updated 353 354 CoinExchange CUBE/BTC $1,568,170 $13064.30 0.03% Recently 13 14 BTCC BTC/USD $58,216,900 $7630.00 1.25% Recently 224 225 LakeBTC BTC/USD $3,144,690 $7144.04 0.07% Recently 251 252 Bitinka BTC/ARS $2,599,470 $7087.53 0.06% Recently 170 171 BCEX NAS/BTC $4,433,300 $7057.71 0.09% Recently .. ... ... ... ... ... ... ... 280 281 Bit-Z XAS/BTC $2,230,820 $6297.18 0.05% Recently 279 280 BtcTrade.im ETC/BTC $2,270,590 $6287.73 0.05% Recently 291 292 OKEx OF/BTC $2,112,840 $6278.22 0.05% Recently 369 370 Hotbit BZNT/BTC $1,453,500 $6272.91 0.03% Recently 193 194 BCEX ANS/BTC $3,664,540 $5950.85 0.08% Recently
[400 rows x 7 columns]

суббота, 16 марта 2019 г.

С какого запроса следует начинать авторизацию на DropBox?

Доброго времени суток, уважаемые форумчане!
Изучаю документацию по протоколу Oauth 1.0 для DropBox, но не могу понять, с какого запроса следует начинать сеанс обращения к серверу DropBox. В документации написано, что первый запрос должен содержать следующие параметры:
oauth_consumer_key: The Consumer Key. oauth_signature_method: The signature method the Consumer used to sign the request. oauth_signature: The signature as defined in Signing Requests. oauth_timestamp: As defined in Nonce and Timestamp. oauth_nonce: As defined in Nonce and Timestamp. oauth_version: OPTIONAL. If present, value MUST be 1.0 . Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. Service Providers’ response to non-1.0 value is left undefined. Additional parameters: Any additional parameters, as defined by the Service Provider.
Для вычисления подписи предлагается использовать PLAINTEXT, HMAC-SHA1 или RSA-SHA1. Методом PLAINTEXT ничего не получилось, как не пыталась отправлять запросы, сервер всё время возвращал ошибку "Not authorized".
Решила попробовать создавать подпись с помощью HMAC-SHA1, но не понятно, что будет являться входным параметром, а что ключом. Подскажите ещё, пожалуйста, какой нужно отправлять метод: POST или GET, куда передавать параметры: в строку запроса или в тело запроса?
Ссылка на рефы DropBox: http://oauth.net/core/1.0/#signing_process
Пример:
wstring url = L"https://www.dropbox.com/home/request_token"; wstring oauth_nonce; CreateRequestParam(oauth_nonce); wstring oauth_callback = L""; wstring oauth_consumer_key = L"my App key"; wstring oauth_consumer_secret = L"my App secret"; wstring oauth_signature_method = L"PLAINTEXT"; wstring oauth_timestamp = to_wstring(*(double*)time); wstring oauth_version = L"1.0"; wstring oauth_signature = oauth_consumer_secret + L"&"; wstring params = L"oauth_consumer_key=" + oauth_consumer_key + L"&oauth_signature_method=" + oauth_signature_method + L"&oauth_signature=" + oauth_signature + L"&oauth_timestamp=" + oauth_timestamp + L"&oauth_nonce=" + oauth_nonce + L"&oauth_version=" + oauth_version;
int err = PostRequest(url, params);
На указанный url отправляю HTTP POST запрос, в теле передаю параметры, указанные выше. Должны возвращаться out_token и outh_secret, но возвращается страница в html-формате, в которой нет ни того, ни другого. Что я делаю не так?


Ответ

Не знаю, актуален ли еще вопрос, попробую ответить.
Первый запрос на адрес https://api.dropbox.com/1/oauth/request_token
Пример:
POST https://api.dropbox.com/1/oauth/request_token HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0 Host: api.dropbox.com Accept: */* Accept-Encoding: deflate, gzip Authorization: OAuth oauth_consumer_key="973quph3jxdgqoe",oauth_nonce="105816471209",oauth_signature="wloizpn331cc8zd&",oauth_signature_method="PLAINTEXT",oauth_timestamp="Wed%2C%2013%20May%202015%2015%3A37%3A53%20%2B0000",oauth_version="1.0" Content-Length: 0 Content-Type: application/x-www-form-urlencoded
В ответ получаете oauth_token
HTTP/1.1 200 OK Server: nginx Date: Wed, 13 May 2015 15:46:32 GMT Content-Type: application/x-www-form-urlencoded ... Content-Length: 64
oauth_token_secret=LZl8HyVRQuP1ifON&oauth_token=RS4XReiBykw8WHNz
Затем отправляете пользователя в браузер на страничку https://www.dropbox.com/1/oauth/authorize?oauth_token=RS4XReiBykw8WHNz
Пользователь нажимает кнопочку Allow.
Затем выполняете запрос на второй URL (подписываете его уже с использованием полученного ранее oauth_token_secret
https://api.dropbox.com/1/oauth/access_token
POST https://api.dropbox.com/1/oauth/access_token HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0 Host: api.dropbox.com Accept: */* Accept-Encoding: deflate, gzip Authorization: OAuth oauth_consumer_key="973quph3jxdgqoe",oauth_nonce="847334669",oauth_signature="wloizpn331cc8zd&LZl8HyVRQuP1ifON",oauth_signature_method="PLAINTEXT",oauth_timestamp="Wed%2C%2013%20May%202015%2015%3A46%3A46%20%2B0000",oauth_token="RS4XReiBykw8WHNz",oauth_version="1.0" Content-Length: 0 Content-Type: application/x-www-form-urlencoded
И получаете в ответ токен, который будете использовать при последующих запросах:
HTTP/1.1 200 OK Server: nginx Date: Wed, 13 May 2015 15:46:55 GMT Content-Type: application/x-www-form-urlencoded Connection: keep-alive ... Content-Length: 76
oauth_token_secret=32mdalirxxxxa8j&oauth_token=yx8f9rdxxxxj8dia&uid=1921xxxx
Пример авторизации на Dropbox
Пример OAuth авторизации на Flickr с подписыванием запроса HMAC-SHA1

понедельник, 26 ноября 2018 г.

Как вернуть мета информацию из HEAD запроса используя Retrofit2?

Для взаимодействия с сервером использую ретрофит. Есть GET запрос который возвращает огромное кол-во данных. Чтобы каждый раз не съедать трафик клиента нужно проверять обновились ли данные га сервере. Для этого использую HEAD запрос к тому же эндпоинту. Проблема в том что HEAD запрос в Call<> можно положить только Void иначе выкидывает эксепшен. А при таком запросе в колбэк ничего не возвращается, так как у этого запроса нет респонса. Немного погуглив я нашел способ все же получить нужную мне метаинформацю из хедеров в Interceptor.
chain.proceed(request).header("etag"))
Но тут меня настигла очередная проблема, как без колбэка передать этот "етаг" туда откуда был сделан реквест? Должен же быть какой нибудь адекватный/элегантный способ?


Ответ

Retrofit2 корректно возвращает респонс в коллбек при HEAD запросах. Данный код у меня отлично работает:
Call c = service.headRequest(url);
c.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { response.headers(); }
@Override public void onFailure(Call call, Throwable t) {
} });
response не пустой и содержит в себе хедэры response.headers(). Если в вашем случае это не работает, то возможно, что проблема в сервере, который некорректно обрабатывает HEAD запросы.