小编jdh*_*deb的帖子

如何在 Apache 中阻止特定的用户代理

我正在配置我的 Django 应用程序以通过电子邮件向我发送错误(例外)。

通常没问题 - 但我的电子邮件托管在 Office 365 上,似乎 Microsoft 正在自动扫描和加载电子邮件中的 URL。

结果是它点击了我的 Django 应用程序中的 URL,并导致另一个错误......和另一封电子邮件。最终结果:一个迷人的小邮件循环,它在几秒钟内向我发送了 50 多条消息。

我在我的 apache 日志中发现了这样的条目:

157.55.39.163 - - [22/Aug/2018:17:30:05 +0000] "GET /testerror HTTP/1.1" 500 5808 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534+ (KHTML, like Gecko) BingPreview/1.0b"
Run Code Online (Sandbox Code Playgroud)

我想阻止访问用户代理(包含“BingPreview”),所以我可以防止这个循环。

我把它放到我的虚拟主机中:

SetEnvIf User-Agent "^.*BingPreview.*$" bad_user

<Directory /path/top/my/app/>
   <Files wsgi.py>
       Require not env bad_user
   </Files>
</Directory>
Run Code Online (Sandbox Code Playgroud)

但是当我重新加载 apache 时,出现错误negative Require directive has no effect in <RequireAny> directive

apache apache2.4

5
推荐指数
2
解决办法
9171
查看次数

如何使用 Python 2.7 发送 HTTP POST

我正在尝试使用 Python 发送 HTTP POST 请求。我可以让它在 3.0 上工作,但我找不到 2.7 上的好例子。

hdr = {"content-type": "application/json"}
payload= ("<html><body><h1>Sorry it's not Friday yet</h1> </body></html>")
r = requests.post("http://my-url/api/Html", json={"HTML": payload})

with open ('c:/temp/a.pdf', 'wb') as f:
    b64str = json.loads(r.text)['BinaryData']  #base 64 string is in BinaryData attr
    binStr = binascii.a2b_base64(b64str)  #convert base64 string to binary
    f.write(binStr)
Run Code Online (Sandbox Code Playgroud)

该 api 采用以下格式的 json:

{
  HTML : "a html string"
}
Run Code Online (Sandbox Code Playgroud)

并返回以下格式的 json:

{
    BinaryData: 'base64 encoded string'      
}
Run Code Online (Sandbox Code Playgroud)

python python-2.7

4
推荐指数
1
解决办法
2万
查看次数

标签 统计

apache ×1

apache2.4 ×1

python ×1

python-2.7 ×1