V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Adia
V2EX  ›  Python

请教一个关于 url 的问题

  •  1
     
  •   Adia · 2017-02-26 20:30:52 +08:00 · 1988 次点击
    这是一个创建于 2805 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大概的场景就是客户端那边给了一个 url ,到了 python 这边,要去调用 linux 的 shell ,做些 curl URL 和 wget URL 的操作。但是有些 URL 里面带了括号或者一些奇怪的东西。需要转义。感觉用正则太麻烦, 请问各位大佬有什么好办法吗?
    17 条回复    2017-02-27 11:13:00 +08:00
    zjuhwc
        1
    zjuhwc  
       2017-02-26 20:37:51 +08:00 via iPhone
    只需要 curl 和 wget 的功能的话,几乎都可以用 requests 这个包来实现吧
    Adia
        2
    Adia  
    OP
       2017-02-26 20:38:39 +08:00
    @zjuhwc 项目里基本都是这么写的..要重构很麻烦
    Adia
        3
    Adia  
    OP
       2017-02-26 20:38:45 +08:00
    zjuhwc
        4
    zjuhwc  
       2017-02-26 20:42:53 +08:00 via iPhone
    哦,那转义为啥需要正则?
    alcarl
        5
    alcarl  
       2017-02-26 20:45:52 +08:00 via Android   ❤️ 1
    不是应该做好 urlencode 然后再调用 shell 的么?(ಠ .̫.̫ ಠ)
    Adia
        6
    Adia  
    OP
       2017-02-26 20:46:04 +08:00
    @zjuhwc 用双引号包起来,如果 url 有"就麻烦了。\就要看哪些需要了,得用正则
    zjuhwc
        7
    zjuhwc  
       2017-02-26 20:48:59 +08:00 via iPhone
    这个是转义,不是正则啊……你可以用三个引号的字符串来写命令,就不用担心双引号问题了
    Adia
        8
    Adia  
    OP
       2017-02-26 20:51:16 +08:00
    @alcarl 感谢
    Adia
        9
    Adia  
    OP
       2017-02-26 20:53:41 +08:00
    @alcarl 不过这样 curl 就没法用了..
    @zjuhwc 不过这样 curl 就没法用了..
    liyu4
        10
    liyu4  
       2017-02-26 20:57:02 +08:00 via iPhone
    多了\
    alcarl
        11
    alcarl  
       2017-02-26 21:01:30 +08:00 via Android   ❤️ 1
    @Adia 为啥没法用了? curl 空格跟上编码好的 url 不可以么?
    Adia
        12
    Adia  
    OP
       2017-02-26 21:16:00 +08:00
    @alcarl 是的
    @liyu4 什么?
    loading
        13
    loading  
       2017-02-26 21:21:35 +08:00 via Android
    不给例子吗?
    不过问题我看应该解决了,你应该是不了解 urlencode 的事。
    akira
        14
    akira  
       2017-02-26 21:28:01 +08:00
    urlencode 两次,或者改成用类似 base64 编码处理一下
    Adia
        15
    Adia  
    OP
       2017-02-26 21:36:25 +08:00
    @loading 已解决,感谢。
    @akira 两次怎么行..我一位朋友也和我讲过 Base64 ,不过好像不成啊。能给个 demo 吗
    @alcarl 已解决,感谢
    binux
        16
    binux  
       2017-02-26 21:42:47 +08:00
    python 调用 shell 为什么要转移?直接传参数列表过去不就好了
    stranbird
        17
    stranbird  
       2017-02-27 11:13:00 +08:00
    重构还是值得的,毕竟现在你们已经遇到继续往下开发的瓶颈了。
    具体做的时候可以用 https://curl.trillworks.com/来把 curl 命令自动转化成 request 的代码。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2784 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:36 · PVG 20:36 · LAX 05:36 · JFK 08:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.