я передаю параметр в URL из командной строки, но выдает ошибку с неверным соединением - PullRequest
0 голосов
/ 08 апреля 2020

Значение Host внутри URL будет передано в качестве аргументов, но когда я распечатываю URL, он работает нормально, но не выполняется должным образом как весь сценарий.

Python script:

import requests
import json
import urllib
import sys 
import os

host=(str(sys.argv[1]))

headers={
        "accept": "application/json",
        "content-type": "application/json"
    }

test_urls = 'https://{host}/Thingworx/Things/PG.MonitorStats.Stream/Services/GetStreamData?maxItems=1&oldesFirst=false&appKey=0b858f3f-4ed0-499c-a4d2-9ad0fbc0da9b&method=post'.format(host=host)
print (test_urls)

def return_json(url):
    try:
        response = requests.get(url,headers=headers)

        # Consider any status other than 2xx an error
        if not response.status_code // 100 == 2:
            return "Error: Unexpected response {}".format(response)

        json_obj = response.json()
        return json.dumps(json_obj)
    except requests.exceptions.RequestException as e:
        # A serious problem happened, like an SSLError or InvalidURL
        return "Error: {}".format(e)

for url in test_urls:
    print return_json(url).format(host=host)

Ошибка вывода:

Error: Invalid URL 'h': No schema supplied. Perhaps you meant http://h?
Error: No connection adapters were found for ':'
Error: Invalid URL '/': No schema supplied. Perhaps you meant http:///?

1 Ответ

1 голос
/ 08 апреля 2020

test_urls - это строка (не массив строк), поэтому вы выполняете итерацию для каждого символа и пытаетесь получить GET h, затем t, затем t, ...

И format на выходе return_json не имеет смысла. Как и ваш print (при условии, что вы используете Python 3, печать - это функция).

Также запросы имеют ярлыки для «Считать любой статус, кроме 2xx ошибкой»: Response.ok и Response.raise_for_status().

И. .. почему вы бросаете ответ JSON? Если вы хотите текстовую версию, просто верните Response.text нет причин для декодирования, а затем немедленно перекодируйте ответ.

...