使用Python请求Modu定制GET响应

2024-09-30 01:22:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python的新手,所以请忍受我。。。 尝试对Instagram API进行一个简单的oAuth调用。注册应用程序后,您将获得客户端ID、客户端密码等,oAuth过程中的第一步是将用户定向到此授权URL:

https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code

当我在带有客户机ID和重定向URL的浏览器中加载此URL时,浏览器中将显示以下URL(例如):

^{pr2}$

我的问题是,如何使用请求模块复制浏览器中发生的事情?在

当我尝试以下操作时:

 >>> import requests
 >>> b = requests.get('https://api.instagram.com/oauth/authorize/?client_id=c918883453360349850498&redirect_uri=http://instagrram.myredirect.com/home.html&response_type=code')
 >>> b.text 

我知道什么是不恰当的回答“我知道这是什么意思,我不该这样做”:

u'<!DOCTYPE html>\n<!--[if lt IE 7]>      <html lang="en" class="no-js lt-ie9 lt-ie8 lt-ie7 not-logged-in "> <![endif]-->\n<!--[if IE 7]>         <html lang="en" class="no-js lt-ie9 lt-ie8 not-logged-in "> <![endif]-->\n<!--[if IE 8]>         <html lang="en" class="no-js lt-ie9 not-logged-in "> <![endif]-->\n<!--[if gt IE 8]><!-->
<html lang="en" class="no-js not-logged-in "> <!--<![endif]-->\n
<head>\n
    <meta charset="utf-8">
    \n
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    \n\n <title>Log in &mdash; Instagram</title>\n\n
    <script type="text/javascript">\
    n
    WebFontConfig = {
    \
    n
    custom: {\n
        families: [\'proxima-nova:n4,n7\'],\n      urls: [\'//instagramstatic-a.akamaihd.net/bluebar/660508e/cache/styles/fonts.css\']\n    }\n  };\n</script>
    \n
    <script src="//instagramstatic-a.akamaihd.net/bluebar/660508e/scripts/webfont.js" type="text/javascript"
            async></script>
    \n\n \n \n
    <meta name="robots" content="noimageindex">
    \n \n
    <meta name="apple-mobile-web-app-capable" content="yes">
    \n
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    \n\n\n \n
    <meta id="viewport" name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
    \n\n\n
    <script type="text/javascript">\
    n(function () {\n
        var docElement = document.documentElement;\n
        var classRE = new RegExp(\'(^|\\\\s)no-js(\\\\s|$)\');\n            var className = docElement.className;\n            docElement.className = className.replace(classRE, \'$1js$2\');\n        })();\n        </script>
    \n\n \n\n \n \n \n
    <link rel="Shortcut Icon" type="image/x-icon"
          href="//instagramstatic-a.akamaihd.net/bluebar/660508e/images/ico/favicon.ico">
    \n \n \n
    <link rel="apple-touch-icon-precomposed"
          href="//instagramstatic-a.akamaihd.net/bluebar/660508e/images/ico/apple-touch-icon-precomposed.png">
    \n
    <link rel="apple-touch-icon-precomposed" sizes="72x72"
          href="//instagramstatic-a.akamaihd.net/bluebar/660508e/images/ico/apple-touch-icon-72x72-precomposed.png">
    \n
    <link rel="apple-touch-icon-precomposed" sizes="114x114"
          href="//instagramstatic-a.akamaihd.net/bluebar/660508e/images/ico/apple-touch-icon-114x114-precomposed.png">
    \n
    <link rel="apple-touch-icon-precomposed" sizes="144x144"
          href="//instagramstatic-a.akamaihd.net/bluebar/660508e/images/ico/apple-touch-icon-144x144-precomposed.png">
    \n \n \n
    <link href="//instagramstatic-a.akamaihd.net/bluebar/660508e/cache/styles/distillery/dialog-main.css"
          type="text/css" rel="stylesheet"></link>
    \n
    <!--[if lt IE 9]>\n    <style>\n        .dialog-outer {\n            min-height: 0;\n        }\n    </style>\n    
    <![endif]-->\n\n \n
    <script src="//instagramstatic-a.akamaihd.net/bluebar/660508e/scripts/jquery.js" type="text/javascript"></script>
    \n
    <script src="//instagramstatic-a.akamaihd.net/bluebar/660508e/scripts/bluebar.js" type="text/javascript"></script>
    \n
    <script type="text/javascript">\
    n
    $(document).ready(function () {\n
        $("#id_username").focus();\n
        setTimeout(function () {\n
            document.getElementById(\'viewport\').setAttribute(\'content\', \'width=\'+ window.innerWidth + \', user-scalable=no\');\n        }, 5);\n    });\n</script>
    \n\n\n
</head>
\n
<body class="p-dialog oauth-login">\n \n \n
<div class="root">\n \n
    <section class="dialog-outer">\n
        <div class="dialog">\n
            <header>\n <h1 class="logo">Instagram</h1>\n \n</header>
            \n
            <div class="dialog-main">\n \n\n\n\n\n\n\n
                <form method="POST" id="login-form" class="adjacent"
                      action="/accounts/login/?force_classic_login=&amp;next=/oauth/authorize/?client_id=c91888345336494ab7ea7046427ca23e%26redirect_uri=http://instagrram.geometryfletch.com/home.html%26response_type=code">
                    \n <input type="hidden" name="csrfmiddlewaretoken" ..........

但是,当您将URL加载到浏览器中时,如何让请求只返回code:code=956237827314ee22092384984938?在


Tags: notextltapplenettypejsscript
1条回答
网友
1楼 · 发布于 2024-09-30 01:22:16

出于生产目的,您不应该重新实现oauth。请看一下https://pypi.python.org/pypi/oauthlib,这是一个用于执行oauth身份验证逻辑的已建立库。如果你想坚持使用requests,那么还有{a2}。除此之外,关于你的问题

My question is, how can I replicate what happens in the browser using the Requests module?

这不是小事。首先,使用curl或浏览器插件来调试/重建协议流。第二步是使用requests重建相同的流。在

示例:当通过GET访问问题中提到的第一个URL时,服务器用一个^{}进行响应,其目标在responseLocation字段中给出。响应还通过Set-Cookie头字段设置cookie。所有这些都很重要。在

相关问题 更多 >

    热门问题