python - 在 python3 上发布请求
问题描述
我最近开始使用 python3 进行编码,并决定做一个项目,我可以尝试加入 Joe Biden 竞选电子邮件列表。但是,我的代码似乎无法正常工作,因为我收到错误作为我的响应。有人可以帮我吗:
import http.client, urllib.parse
email = "theterminatingunicorn777@gmail.com"
connection = http.client.HTTPSConnection("go.joebiden.com")
connection.request("POST", "/page/s/join_the_team?source=website-joinpage", urllib.parse.urlencode(
{'email': email,
'firstname': "Terminating",
'lastname': "Unicorn",
'mobile': "2819573929",
'zip': '70655',
'custom-1572[0]': ''
}))
response = connection.getresponse()
print(response.status, response.reason)
data = response.read()
print(data)
print(email)
作为参考,我在这里使用注册链接:https ://joebiden.com/join/
当我提到错误时,我指的是来自发布请求的响应:
<!DOCTYPE html>\n
<html lang="en-US" class="no-js">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<!-- Google Tag Manager --><script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({\'gtm.start\':\r\n new Date().getTime(),event:\'gtm.js\'});var f=d.getElementsByTagName(s)[0],\r\n j=d.createElement(s),dl=l!=\'dataLayer\'?\'&l=\'+l:\'\';j.async=true;j.src=\r\n \'https://www.googletagmanager.com/gtm.js?id=\'+i+dl;f.parentNode.insertBefore(j,f);\r\n })(window,document,\'script\',\'dataLayer\',\'GTM-M96J785\');</script><!-- End Google Tag Manager -->
<title>Joe Biden for President: Official Campaign Website | Join The Team | Biden for President</title>
<script src="https://use.typekit.net/lwk5jsx.js"></script><script>try{Typekit.load({ async: false });}catch(e){}</script>
<meta name="robots" content="noindex,follow">
<link rel="stylesheet" id="bexc-main-css" href="https://joebiden.com/wp-content/themes/bexc/css/main.css" type="text/css" media="all">
<link rel="canonical" href="https://go.joebiden.com/page/s/join_the_team">
<link rel="stylesheet" href="/page/static/20201019/skins/bsd-light/signup/frontend.css" type="text/css">
<script src="/page/static/20201019/ext/jquery/jquery-1.4.1.min.js" type="text/javascript"></script><script type="text/javascript">!window.jQuery && document.write(unescape(\'%3Cscript src="/ext/jquery/jquery-1.4.1.min.js"%3E%3C/script%3E\'))</script><script src="/page/static/20201019/ext/jquery/cookie/jquery.cookie.min.js" type="text/javascript"></script><script src="/modules/spud/js/Spud.js.php" type="text/javascript"></script><script src="/page/static/20201019/javascript/Core/form/gdprValidator.js" type="text/javascript"></script><script type="text/javascript">window.bQuery = jQuery.noConflict(true);</script>
<link rel="stylesheet" href="/page/static/20201019/css/jquery_ui_reset.css" type="text/css">
<script src="/page/static/20201019/javascript/bsd.js" type="text/javascript"></script><script src="/page/static/20201019/utils/locale/javascript/locale.class.js" type="text/javascript"></script><script src="/page/static/20201019/ext/yui/build/yahoo-dom-event/yahoo-dom-event.js" type="text/javascript"></script><script src="/page/static/20201019/modules/signup/javascript/locale.js" type="text/javascript"></script><script src="/page/static/20201019/modules/signup/javascript/onsubmit.js" type="text/javascript"></script><script src="/page/static/20201019/utils/ajax/ajax.class.js" type="text/javascript"></script><script src="/page/static/20201019/ext/jquery/mailcheck/jquery.mailcheck.js" type="text/javascript"></script><script type="text/javascript">\n\n(function(){\n function setcookie(name,value,days,domain) {\n var expires = days ? "; expires=" + (new Date(days*864E5 + (new Date()).getTime())).toGMTString() :"";\n document.cookie = name+"="+value+expires+"; path=/; domain="+domain;\n document.cookie = name+"="+value+expires+"; path=/";\n }\n setcookie("source", "website-joinpage", 7, "americanpossibilities.org");\n}());\n</script>
</head>
<body class="page-bsd language-en">
\r\n <!-- Google Tag Manager (noscript) -->\r\n
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-M96J785" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
\r\n <!-- End Google Tag Manager (noscript) -->\r\n\r\n <a class="skip-link screen-reader-text" href="#main-content">Skip to content</a>\r\n\r\n
<div class="bsd-eyebrow">
\r\n
<div class="left"><a href="https://joebiden.com/">Return to joebiden.com</a></div>
\r\n
</div>
\r\n\r\n
<div class="site-header-wrapper">
\r\n
<header id="site-header" class="clearfix">
<div class="site-title">
\r\n
<a href="https://joebiden.com/" rel="home">
\r\n
<div class="element-invisible">Joe Biden for President 2020: Official Campaign Website</div>
\r\n <img src="https://joebiden.com/wp-content/themes/bexc/img/logo.svg" width="135" height="56" alt="Logo for Joe Biden for President">
</a>
\r\n
</div>
\r\n <a href="https://secure.actblue.com/donate/joe2020" class="button red donate-button" style="right: 0;">Donate</a>\r\n
</header>
<!-- #site-header -->
</div>
\r\n\r\n
<div id="main-content">
\r\n
<main id="main">
<article class="view-page post-3 page type-page status-publish hentry">
<div class="entry-content">
\r\n\r\n
<style>\r\n \r\n.type-page.view-page .entry-content {\r\n font: 400 20px/27px \'brother-1816\', sans-serif;\r\n max-width: 600px;\r\n margin: -33px 0px 0px 75px;\r\n \r\n}\r\n@media screen and (max-width: 1000px) {\r\nbody {\r\n background: #ffffff;\r\n}\r\n\r\n.type-page.view-page .entry-content {\r\n max-width: 800px;\r\n margin: 20px auto 0 auto;\r\n} \r\n\r\n.type-page.view-page {\r\n \r\n border-bottom: 0px solid #D7D7D7 !important;\r\n}\r\n\r\n#main-content {\r\n padding-top: 20px;\r\n}\r\n\r\n}\r\n</style>
<!-- Content here -->
<div id="signupheader"></div>
<span class="signuperror">PLEASE CORRECT THE PROBLEMS MARKED BELOW</span><br>
<form name="signup" class="bsd-signup-21" action="/page/sp/join_the_team" method="post" id="signup">
\n
<table id="signuptable">
<tr>
<td>
\n
<table width="100%">
<td valign="top">
\n
<div class="fieldset" id="bsd-field-email">
\n
<div class="label"><label class="field">Email<span class="required">*</span></label></div>
\n
<div class="input"><input type="email" class="text" size="48" id="email" name="email"></div>
</div>
\n
</td>
</table>
</td>
</tr>
<tr>
<td>
<table width="100%">
<td valign="top">
\n
<div class="fieldset" id="bsd-field-firstname">
\n
<div class="label"><label class="field">First Name</label></div>
\n
<div class="input"><input size="16" id="firstname" name="firstname" type="text"></div>
</div>
\n
</td>
</table>
</td>
</tr>
<tr>
<td>
<table width="100%">
<td valign="top">
\n
<div class="fieldset" id="bsd-field-lastname">
\n
<div class="label"><label class="field">Last Name</label></div>
\n
<div class="input"><input size="25" id="lastname" name="lastname" type="text"></div>
</div>
\n
</td>
</table>
</td>
</tr>
<tr>
<td>
<table width="100%"></table>
</td>
</tr>
<tr>
<td>
<table width="100%">
<td valign="top">
\n
<div class="fieldset" id="bsd-field-zip">
\n
<div class="label"><label class="field">Zip Code<span class="required">*</span></label></div>
\n
<div class="input"><input size="8" id="zip" name="zip" type="text"></div>
</div>
\n
</td>
</table>
</td>
</tr>
<tr>
<td>
<table width="100%">
<td valign="top">
\n
<div class="fieldset" id="bsd-field-mobile">
\n
<div class="label"><label class="field">Mobile Phone (Optional)</label></div>
\n
<div class="input"><input type="tel" class="text" size="15" id="mobile" name="mobile"></div>
</div>
\n
</td>
</table>
</td>
</tr>
<tr>
<td>
<table width="100%">
<td valign="top">
\n
<div class="fieldset" id="bsd-field-custom-1572-group">
\n
<div class="label"><label class="field">Volunteer</label></div>
\n
<div class="input"><input id="custom-1572_0" class="custom-1572" name="__custom-1572[0]" type="checkbox" value="1" onclick="if (this.checked) { this.form['custom-1572[0]'].value='Sign up for volunteer updates'; }else { this.form['custom-1572[0]'].value=''; } "><label for="custom-1572_0">Sign up for volunteer updates<br></label><input type="hidden" name="custom-1572[0]" value=""></div>
</div>
\n
</td>
</table>
</td>
</tr>
<tr>
<td>
<table width="100%">
<div style="display: none"><label for="best-contact-time">Please leave this field blank:</label> <input id="best-contact-time" name="best-contact-time" type="text"></div>
<td valign="top">
\n
<div class="fieldset" id="bsd-field-submit-btn">
\n
<div class="label"><label class="field"></label></div>
\n
<div class="input"><input name="submit-btn" value="Submit Form" type="submit" id="submit_button"></div>
</div>
\n
</td>
</table>
</td>
</tr>
<tr>
<td>
<table width="100%">
<tr>
<td id="required_note"><span class="required">*</span><span style="font-size: 80%;"> denotes required field</span></td>
</tr>
<input name="country" type="hidden" value="US"><input name="redirect_url" type="hidden" value=""><input id="_guid" name="_guid" type="hidden" value="">
</table>
</td>
\n
</tr>
</table>
</form>
<div id="signupfooter"></div>
<script type="text/javascript">\n bQuery(\'#email\').blur(\n function() {\n \n bQuery(this).mailcheck({\n domains: ["aol.com","att.net","bellsouth.net","charter.net","comcast.net","cox.net","earthlink.net","gmail.com","hotmail.com","icloud.com","live.com","mac.com","me.com","msn.com","optonline.net","outlook.com","sbcglobal.net","verizon.net","yahoo.com","ymail.com"],\n \n suggested: function(element, suggestion) {\n bQuery(element).parents(\'div.fieldset\').children(\'.bsd-mailcheck\').remove();\n\n bQuery(element).parents(\'div.fieldset\').append(\n \'<span class="error bsd-mailcheck">Did you mean \' +\n \'<a class="bsd-mailcheck-fix-link" href="#">\' +\n suggestion.domain + \'<\' + \'/a>?<\' + \'/span>\');\n\n bQuery(element).parents(\'div.fieldset\').find(".bsd-mailcheck-fix-link").click(\n function() {\n bQuery(element).val(suggestion.address + \'@\' + suggestion.domain);\n bQuery(element).parents(\'div.fieldset\').children(\'.bsd-mailcheck\').remove();\n });\n },\n empty: function(element) {\n bQuery(element).parents(\'div.fieldset\').children(\'.bsd-mailcheck\').remove();\n }\n });\n\n });\n</script>
<div id="fb-root"></div>
<!-- End Content -->\r\n
</div>
\r\n
</article>
</main>
<!-- #main -->
</div>
<!-- #main-content -->\r\n
<footer id="site-footer">
<div class="disclaimer">Paid for by Biden for President.</div>
<br>
<p>Support our presidential campaign to elect Joe Biden by signing up to <a href="https://go.joebiden.com/page/s/volunteer">volunteer</a> or making a <a href="https://joebiden.com/donate">donation</a>.</p>
\r\n\r\n
<nav id="nav-footer">
<ul class="menu">
<li><a href="https://www.bluestate.co/privacy-policy/">Blue State Digital Privacy Policy</a>\r\n </li>
<li>© Copyright 2019. All rights reserved.</li>
\r\n
</ul>
</nav>
</footer>
<!-- #site-footer -->
</body>
</html>
'
它说“请更正以下问题”
解决方案
在代码中,您将 POST 请求发送到注册页面,这不会产生影响,因为注册会将输入详细信息发送到实际将信息添加到列表中的页面。此处,该页面在表单 action=/page/sp/join_the_team 的操作详细信息中标识
推荐阅读
- ios - 我怎么知道哪台打印机连接到钱箱。(EPSON SDK)
- automationanywhere - 当两个对象具有相同的属性时,如何在 Automation Anywhere 中克隆对象?
- excel - 将嵌套 IF 语句的结果汇总到一个单元格中
- python - Pyinstaller:添加自定义模块,将 ply 作为依赖项
- vba - 如何根据条件重组表
- java - 创建列表视图适配器时出现错误
- signalr - 如何在 SignalR Azure Functions 中启用消息包协议?
- reactjs - 将数据保存到 Firebase
- r - 如何根据匹配从另一个数据框中引入值?
- javascript - 如何在浏览器 JavaScript 中检测 OS X 是否处于暗模式?