使用shell/bash脚本读取HTTP输出

8

我的网址 (http://myhost.com/getuser/Default.aspx?username=b772643) 总是返回以下信息行:

John, Thomas;John.B.Thomas@Company.com

我希望能够使用shell或bash脚本读取这行内容,而无需使用wget/lynx。我处于不能使用其他工具、perl语言等的情况。


1
刚刚验证了,我可以使用curl。 - baluchen
4个回答

24

Curl或wget显然更适合这项工作,但是为了记录,bash和Unix标准命令(cat和printf)也可以完成任务。

ksh引入了shell网络内部处理方法,并被bash采用。

#!/bin/bash

exec 5<> /dev/tcp/myhost.com/80
cat <&5 &
printf "GET /getuser/Default.aspx?username=b772643 HTTP/1.0\r\n\r\n" >&5

能否用一行代码实现这个? - ethree
1
@ethree 当然可以,只需将所有命令用分号隔开放在一行即可。你也可以创建一个shell函数。 - jlliagre
@ethree,请用更加技术性和描述性的术语来定义“不太高兴”。 - jlliagre
我认为它对&符号感到不满了。-bash: 附近意外的 `;' 语法错误 - ethree
1
@ethree 你可能放了太多的分号,请把你遇到问题的那一行发出来,我这边这个是正常工作的:(exec 5<> /dev/tcp/www.google.com/80;cat <&5 &;printf "GET /index.html HTTP/1.0\r\n\r\n" >&5) - jlliagre
让我们在聊天中继续这个讨论。点击此处进入聊天室 - ethree

5

一句话概括:

(echo 'GET /getuser/Default.aspx?username=b772643' > /dev/tcp/myhost.com/80);

3
所以
curl "http://myhost.com/getuser/Default.aspx?username=b772643"


curl "http://myhost.com/getuser/Default.aspx?username=b772643"| sed 's/\(.*\);\(.*\)/\2 \1/' | while read email name; do echo =$email=$name=; done

感谢大家,所有的解决方案都很好用。Curl 是最好的一个。curl "http://myhost.com/getuser/Default.aspx?username=b772643" - baluchen

2
你可以使用:

您可以使用:

curl "http://myhost.com/getuser/Default.aspx?username=b772643"

并从返回的内容中提取数据 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接