Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将RESTPlus与请求结合起来:人类的HTTP?_Python_Flask_Python Requests_Flask Restful_Flask Restplus - Fatal编程技术网

Python 如何将RESTPlus与请求结合起来:人类的HTTP?

Python 如何将RESTPlus与请求结合起来:人类的HTTP?,python,flask,python-requests,flask-restful,flask-restplus,Python,Flask,Python Requests,Flask Restful,Flask Restplus,我正在使用Flask RESTPlus创建一个端点,并使用Requests:HTTP for Humans从一个电子商务站点中获取产品详细信息 我使用请求完美地获得了产品详细信息,但当我将其与FLASK RESTPlus结合使用时,我面临一些问题 以下是代码片段: @api.route('/product') class ProductDetails(Resource): query_parser = api.parser() query_parser.add_argument(

我正在使用Flask RESTPlus创建一个端点,并使用Requests:HTTP for Humans从一个电子商务站点中获取产品详细信息

我使用请求完美地获得了产品详细信息,但当我将其与FLASK RESTPlus结合使用时,我面临一些问题

以下是代码片段:

@api.route('/product')
class ProductDetails(Resource):
    query_parser = api.parser()
    query_parser.add_argument('marketplace', required=True, location='args')

    def post(self, query_parser=query_parser):
        args = query_parser.parse_args()
        url = args['marketplace']

        try:
            response = requests.post(
                url=args,
                json={
                     'url': url
                }, timeout=60
           )
            }
        except Exception as e:
           return {
                'status': 'error',
                'message': str(e)
            }
response = requests.post(
    url=args,
    json={
         'url': url
    }, timeout=60
)
当我尝试访问端点时

http://localhost:5000/api/v1/product?marketplace=http://xx.xx.xx.xx/v1/markeplace_name/url
我总是会遇到以下错误:

{
    "status": "error",
    "message": "No connection adapters were found for '{'marketplace': 'http://xx.xx.xx.xx/v1/market_place_name/url'}'"
}
让我感到困惑的是,为什么我可以事先得到产品的详细信息


那么,我的代码有什么问题吗?任何需要学习的示例或源代码都很好。

问题是您正在将
args
dict传递给
请求。post
作为url参数。请求验证您提供给
.post()
的url是否有效,并且以
{'marketplace':…}
开头的url显然是无效的url

守则的这部分:

@api.route('/product')
class ProductDetails(Resource):
    query_parser = api.parser()
    query_parser.add_argument('marketplace', required=True, location='args')

    def post(self, query_parser=query_parser):
        args = query_parser.parse_args()
        url = args['marketplace']

        try:
            response = requests.post(
                url=args,
                json={
                     'url': url
                }, timeout=60
           )
            }
        except Exception as e:
           return {
                'status': 'error',
                'message': str(e)
            }
response = requests.post(
    url=args,
    json={
         'url': url
    }, timeout=60
)
args=query\u parser.parse\u args()

当您要求source帮助学习时,以下代码是请求在url开头检查适配器的代码,您可以在sourcecode中找到:

用于检查url的
self.adapters.items()
来自:

该方法本质上将预期的url前缀映射到
self.adapters
dict中请求的连接适配器类型之一