Получение ошибки ResponseStatusLine при загрузке .json с веб-сайта API - PullRequest
0 голосов
/ 11 апреля 2019

Я пытался создать небольшое приложение, использующее API Discogs для личного использования, для поиска отдельных исполнителей и их альбомов, которое до сих пор работало с использованием неофициального приложения Discogs C #.Теперь проблема в том, что единственный способ извлечь треклист из альбома - это использовать ресурсный URL, который я получаю из каждого запроса альбома (например, https://api.discogs.com/releases/2890373).

Я пытался извлечь .json из каждого URLи я продолжаю получать сообщение об ошибке ResponseLine даже с соответствующими заголовками.

Добавлен заголовок авторизации с моим потребительским ключом и секретным ключом, lke this:

httpWebRequest.Headers.Add("Authorization", "Discogs key=xxx, secret=yyy");

... добавил UserAgent и онвсе еще не работает.

Я пробовал то же самое в Python, и он работал отлично, но я не хочу запускать приложение Python каждый раз, когда мне нужна информация об альбоме.

private void scrape_button_Click(object sender, EventArgs e) {
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("https://api.discogs.com/releases/2890373");
            httpWebRequest.Method = WebRequestMethods.Http.Get;
            httpWebRequest.Timeout = 12000;
            httpWebRequest.ContentType = "application/vnd.discogs.v2.html+json";
            httpWebRequest.Headers.Add("UserAgent", "matija_search/0.1");
            string file;
            var response = (HttpWebResponse)httpWebRequest.GetResponse();
            using(var sr = new StreamReader(response.GetResponseStream())) {
                file = sr.ReadToEnd();
            }
        }

Это кнопка, которая пытается получить данные.

import requests
import json
info = requests.get('https://api.discogs.com/releases/2890373')
data = info.json()
with open('data.json', 'w') as f:
    json.dump(data, f)

Это эквивалент Python, который на самом деле работает ...

1 Ответ

0 голосов
/ 11 апреля 2019

Хорошо, решил проблему.Я не добавил UserAgent правильным образом.Фиксированный код выглядит следующим образом:

private void scrape_button_Click(object sender, EventArgs e) {
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("https://api.discogs.com/releases/2890373");
            httpWebRequest.Method = WebRequestMethods.Http.Get;
            httpWebRequest.Accept = "application/vnd.discogs.v2.html+json";
            httpWebRequest.UserAgent = "matija_search/1";
            string file;
            var response = (HttpWebResponse)httpWebRequest.GetResponse();
            using(var sr = new StreamReader(response.GetResponseStream())) {
                file = sr.ReadToEnd();
            }
            var contentsToWriteToFile = JsonConvert.SerializeObject(file);
            TextWriter writer = new StreamWriter("test.json", false);
            writer.Write(contentsToWriteToFile);
        }
...