【问题标题】:Request URL in PythonPython中的请求URL
【发布时间】:2012-11-18 21:32:04
【问题描述】:

要触发更新,您必须访问浏览器中的网址。这个脚本是在 shell 中制作的:

#!/bin/bash
# Bash to initiate Solr Delta Import Handler

# Setup Variables
hostName=localhost
portNum=8080
SOLRPATH=/solr
SOLR='delta-import&clean=false'
STATUS='dataimport?command=status'
urlCmd='http://${hostName}:${portNum}${SOLRPATH}/dataimport?command=${SOLRCMD}"

# Operations
curl $URLCMD 

我试过用 Python 写这个,这就是我得到的结果:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Setup Variables
hostName='localhost'
portNum='8080'
SOLRPATH='/solr'
SOLRCMD='delta-import&clean=false'
STATUSCMD='dataimport?command=status'
urlCmd='http://${hostName}:${portNum}${SOLRPATH}/dataimport?command=${SOLRCMD}'

# Alternative to Curl {URLCMD}

所以基本上我有两个问题:

  1. 到目前为止,我的 python 代码还可以吗?
  2. python 中 Curl 的简单替代方案是什么?该事件通常仅通过访问 URL 来触发,但我不知道如何在 Python 中简单地执行此操作。

【问题讨论】:

  • 代码能否正常工作并不重要。但我真的认为你应该使用其他命名约定,如 PEP-8 建议如果你要用 python 编写它:python.org/dev/peps/pep-0008

标签: python curl solr request


【解决方案1】:

首先,在 Python 中使用其中一种字符串格式:

urlCmd='http://{0}:{1}{2}/dataimport?command={3}'.format(hostName,portnum, SOLRPATH, SOLRCMD)
#or
urlCmd='http://%s:%s%s/dataimport?command=%s' % (hostName,portnum, SOLRPATH, SOLRCMD)

虽然在使用 libcurl 的 python 中有 pycurl,但如果您希望脚本保持可移植性,您应该使用像 urllib2 这样的内置模块来访问您生成的 URL。

import urllib2
req = urllib2.urlopen(urlCmd)

现在您可以对您的请求做几件事:

req.close      req.fileno     req.getcode    req.headers    req.msg  
req.read       req.readlines  req.code       req.fp         req.geturl   
req.info       req.next       req.readline   req.url

虽然大多数方法都一目了然,但请参阅 urllib2 docs 了解它们的作用的详细说明。

【讨论】:

    【解决方案2】:
    1. 到目前为止,我的 python 代码还可以吗?

    不,不是。请查看 Python 中的字符串格式化。

    试试这个:

    ...
    urlCmd='http://%s:%d%s/dataimport?command=%s' % (hostName, portNum, SOLRPATH, SOLRCMD)
    
    1. python 中 Curl 的简单替代方法是什么?该事件通常仅通过访问 URL 来触发,但我不知道如何在 Python 中简单地执行此操作。

    试试urllib 模块:

    import urllib    
    urllib.urlopen(url)
    

    【讨论】:

    • python 2.7 中是否包含 urllib 还是我需要安装它?另外,感谢您对字符串格式的提示
    • urllib 自 2.3 版起包含在 Python 中。所以这应该适合你。
    猜你喜欢
    • 2017-11-19
    • 2018-09-24
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 2017-11-25
    相关资源
    最近更新 更多