Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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 2.7 在Python中向Heroku发布请求-403禁止_Python 2.7_Heroku_Beautifulsoup_Python Requests - Fatal编程技术网

Python 2.7 在Python中向Heroku发布请求-403禁止

Python 2.7 在Python中向Heroku发布请求-403禁止,python-2.7,heroku,beautifulsoup,python-requests,Python 2.7,Heroku,Beautifulsoup,Python Requests,我现在正在学习网络抓取和构建一个简单的网络应用程序,我决定练习抓取课程表。下面是我在应用程序中遇到的一个代码片段,它使用Python 2.7.4、Flask、Heroku、BeautifulSoup4和请求 import requests from bs4 import BeautifulSoup as Soup url = "https://telebears.berkeley.edu/enrollment-osoc/osc" code = "26187" values = dict(_In

我现在正在学习网络抓取和构建一个简单的网络应用程序,我决定练习抓取课程表。下面是我在应用程序中遇到的一个代码片段,它使用Python 2.7.4、Flask、Heroku、BeautifulSoup4和请求

import requests
from bs4 import BeautifulSoup as Soup

url = "https://telebears.berkeley.edu/enrollment-osoc/osc"
code = "26187"
values = dict(_InField1 = "RESTRIC", _InField2 = code, _InField3 = "13D2")
html = requests.post(url, params=values)
soup = Soup(html.content, from_encoding="utf-8")

sp = soup.find_all("div", {"class" : "layout-div"})[2]
print sp.text
这在本地非常有效。它给了我字符串“计算机科学61A P 001 LEC:”正如预期的那样。然而,当我试图在Heroku上运行它时(使用
Heroku运行bash
然后运行
python
),我得到了一个错误,
403禁止


我是不是错过了Heroku的一些设置?起初我以为这是学校的设置,但后来我想知道为什么它在本地工作没有任何问题。。。任何解释/建议都将不胜感激!提前感谢。

我遇到了类似的问题,请求在本地工作,但在Heroku上被阻止。问题似乎是一些网站阻止了来自Heroku(AWS服务器上的Heroku)的请求。要解决这个问题,您可以通过代理服务器发送请求

heroku中有许多不同的附加组件来实现这一点,我使用了fixie,它有一个合理大小的免费层

要安装:

heroku addons:create fixie:tricycle
然后导入到本地环境中,以便您可以在本地尝试:

heroku config -s | grep FIXIE_URL >> .env
然后在python文件中添加几行:

导入操作系统
导入请求
从bs4进口美汤作为汤
proxyDict={
“http”:os.environ.get('FIXIE_URL',”,
“https”:os.environ.get('FIXIE_URL',”)
}
url=”https://telebears.berkeley.edu/enrollment-osoc/osc"
代码=“26187”
值=dict(_infeeld1=“RESTRIC”,_infeeld2=代码,_infeeld3=“13D2”)
html=requests.post(url,params=value,proxy=proxyDict)
soup=soup(html.content,from_encoding=“utf-8”)
sp=soup.find_all(“div”,“class”:“layout div”})[2]
打印sp.text
Fixie的文档如下:

我认为403错误来自CSRF问题。谢谢,这意味着我无法获得有关Heroku的信息?我已经搜索并找到了这个,但我不确定它与我现在需要的东西有多大关系我不太了解Heroku,但我知道Django,在Django中,CSRF令牌应该作为表单中的隐藏字段提供。这样Django就知道表单是安全的。我以为你的要求错过了这种安全。我试着在Heroku上运行它是什么意思?您是否试图使用位于Heroku上的脚本从外部网站获取字符串?是的,没错。我在heroku上部署了我的应用程序,但它没有做任何事情(Chrome开发工具说POST请求中有问题),所以我缩小了问题的范围,在heroku的外壳中编写了一个小脚本,上面我发布的部分给出了错误。然后我相信你的问题是针对heroku的。可能确实缺少一些设置。您可以随时联系Heroku支持部门,很抱歉,我无法为您提供更多帮助。我想这就是我的问题所在。我尝试了您提到的这个代理,但对我的情况似乎没有帮助