是否有内置的方法来获取Racket中的POST/GET参数?extract-binding和朋友们做我想做的事情,但是关于与文件上传有关的潜在安全风险的结论是可怕的
因此,我们建议不要使用它们,但它们是为了与旧代码兼容而提供的.
我能想到的最好的是(提前原谅我)
(bytes->string/utf-8 (binding:form-value (bindings-assq (string->bytes/utf-8 "[field_name_here]") (request-bindings/raw req))))
Run Code Online (Sandbox Code Playgroud)
但这似乎不必要地复杂化(似乎它会受到Bindings部分中记录的一些相同错误的影响).
在给定字段名称和请求的情况下,是否有一个或多或少的标准,无错误的方法来获取POST/GET变量的值?或者更好的是,将POST/GET值的集合作为列表/散列/列表返回的方法是什么?除了其中任何一个,是否有一个函数可以做同样的事情,但只有POST变量,忽略GET?
这段代码在ColdFusion中会是什么样子?
protected function httpPut($url, $params = null, $data = null)
{
$fh = fopen('php://memory', 'rw');
fwrite($fh, $data);
rewind($fh);
$ch = curl_init($url);
$this->addOAuthHeaders($ch, $url, $params['oauth']);
curl_setopt($ch, CURLOPT_PUT, 1);
curl_setopt($ch, CURLOPT_INFILE, $fh);
curl_setopt($ch, CURLOPT_INFILESIZE, strlen($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$resp = $this->curl->addCurl($ch);
fclose($fh);
return $resp;
}
Run Code Online (Sandbox Code Playgroud)
我有类似下面的东西,但它似乎没有工作.
<cffile action="write" file="d:\my\directory\path\test.xml" output="#arguments.requestXML#">
<cfhttp url="#oaAccessTokenURL#" method="#arguments.requestType#" charset="UTF-8">
<cfheader name="Authorization" value="#oauthheader#">
<cfhttpparam type="file" name="Course" file="d:\my\directory\path\test.xml">
</cfhttp>
Run Code Online (Sandbox Code Playgroud)
我不太了解PHP,以了解如何将$ data变量(只是一串XML数据)放入http请求以及如何在ColdFusion中复制它.
我正在使用python-requests模块来处理 oAuth 请求和响应。我想在对象中设置收到的access_token(响应内容为dict)requests.session.cookies。
如何使用从服务器收到的响应更新会话的现有 cookie?
[编辑]
self.session = requests.session(auth=self.auth_params)
resp = self.session.post(url, data=data, headers=self.headers)
content = resp.content
Run Code Online (Sandbox Code Playgroud)
我想做类似的事情:
requests.utils.dict_from_cookiejar(self.session.cookies).update(content)
Run Code Online (Sandbox Code Playgroud)
在这里,requests.utils.dict_from_cookiejar(self.session.cookies)返回带有一个会话密钥的dict。现在,我想在self.session.cookies.
python session-cookies oauth-2.0 http-request python-requests
我们有一系列工作,工人一次处理这些工作.每个作业都要求我们格式化一些数据并发出HTTP POST请求,并将数据作为请求有效负载.
我们如何让每个工作人员以单线程,非阻塞方式异步发出这些HTTP POST请求?我们不关心请求的响应 - 我们想要的只是请求尽快执行,然后让工作人员立即进入下一个工作.
我们已经探索了使用gevent和grequests库(请参阅为什么gevent.spawn在调用Greenlet.join之前不执行参数化函数?).我们的工作代码看起来像这样:
def execute_task(worker, job):
print "About to spawn request"
greenlet = gevent.spawn(requests.post, url, params=params)
print "Request spawned, about to call sleep"
gevent.sleep()
print "Greenlet status: ", greenlet.ready()
Run Code Online (Sandbox Code Playgroud)
执行第一个print语句,但第二个和第三个打印语句永远不会打印,并且永远不会命中url.
我们如何才能执行这些异步请求?
我正在使用 Ubuntu 14.04,我正在尝试安装 Laravel 框架。为此,我在终端中运行了以下代码:
php工匠服务
等了 4-5 分钟后,我得到了这样的回复:
Laravel 开发服务器在http://localhost:8000/上启动
[2015 年 5 月 26 日星期二 13:19:40] 127.0.0.1:44800 [200]: /favicon.ico
[2015 年 5 月 26 日星期二 13:19:40] 127.0.0.1:44801 [200]: /favicon.ico
等了 10 多分钟后,尽管终端正在工作,但我没有收到更多回复。
真的需要那么多时间吗?或者出了什么问题?
我使用了很棒的 Requests模块来测试我为我们的一个内部项目创建的API.我相信我已经发现了Requests模块本身的缺陷,或者我使用它的缺陷.
由于我们的数据不是超敏感的,因此我们的API使用简单的基本HTTP身份验证来控制访问.当我做了API URL的请求,使用JSON作为数据格式,要么用的urllib2或HTTPBasicAuthHandler PHP和卷曲,我得到我的数据备份的格式正确的JSON字符串 - 没问题.
但是,当我使用Requests模块发出相同的请求时,我得到一个编码的字符串,我无法确定它是什么类型的编码.这是该字符串开头的片段:
\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xadZ\xfb\x8f\xd3H\x12\xfeWzG\xab;\x90
Run Code Online (Sandbox Code Playgroud)
以下是我使用请求重现此问题的几行代码:
import requests
# api_user and api_pw not printed here for security reasons
r = requests.get('http://ourdomain.com/api/featured/school/json', auth=(api_user, api_pw))
status = r.status_code # Produces 200 every time
rawdata = r.read()
print rawdata
Run Code Online (Sandbox Code Playgroud)
每次我这样做,我都会得到编码的字符串.
任何人都可以帮我确定:a)什么编码(对于我自己的启发),和b)为什么请求返回该编码中的数据,以及如何解码和/或"修复"它.
提前致谢!
我想实现一个类来处理我的应用程序的所有HTTP请求,它基本上是:
因此,我将不得不从服务器(JSON)获取结果字符串并将其传递给另一个方法来处理响应.
我目前有这样的方法:
public class Get extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... arg) {
String linha = "";
String retorno = "";
mDialog = ProgressDialog.show(mContext, "Aguarde", "Carregando...", true);
// Cria o cliente de conexão
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(mUrl);
try {
// Faz a solicitação HTTP
HttpResponse response = client.execute(get);
// Pega o status da solicitação
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) { …Run Code Online (Sandbox Code Playgroud) 在建立我的连接并接受一个连接之后:
ServerSocket serverSock = new ServerSocket(6789);
Socket sock = serverSock.accept();
Run Code Online (Sandbox Code Playgroud)
当我输入我的浏览器时,localhost:6789/index.html如何处理这个传入的GET请求并返回index.html?index.html在同一目录中.
首先,我想要index.html实际存在,如果不是,我返回HTTP 404消息.然后我将关闭连接.
我已经浏览了很多关于如何使用请求库创建会话的SO线程,但我尝试的方法都没有实际登录.我对网页设计和协议的经验很少,所以请指出我可能的任何基础知识需要了解.这是我正在做的事情:
import requests
EMAIL = 'my_email'
PASSWORD = 'my_pw'
URL = 'https://account.guildwars2.com/login'
session = requests.session()
login_data = dict(username=EMAIL, password=PASSWORD)
r = session.post(URL, data=login_data)
req = session.get('https://leaderboards.guildwars2.com/en/na/achievements/guild/Darkhaven%20Elite')
print req.content
Run Code Online (Sandbox Code Playgroud)
我看到的内容是如果我没有登录就会看到的内容.
我的语法是否有任何不正确的地方,或者是我设置的登录页面的设置方式导致的问题?
以下内容来自 libcurl 主页:
从同一服务器传输多个文件时,curl 和 libcurl 对持久连接具有出色的支持。Curl 将尝试重用同一命令行/配置文件中指定的所有 URL 的连接,并且 libcurl 将重用使用同一 libcurl 句柄进行的所有传输的连接。
可以肯定的是,如果我创建一个 CURL 句柄 (curl_easy_init()) 并设置它的标头,发出 HTTP 请求,然后更改标头并发出另一个请求,libcurl 仍将尝试使用持久连接,即使标头具有改变了?
libcurl 主页还说
如果您使用 easy 接口,并且调用curl_easy_cleanup,则 libcurl 持有的所有可能打开的连接都将被关闭并被遗忘。
因此,只要我不调用curl_easy_cleanup,即使请求是使用不同的标头发出的,CURL 也会尝试重新使用相同的连接?
谢谢。
http-request ×10
python ×4
php ×2
android ×1
asynchronous ×1
coldfusion ×1
gevent ×1
java ×1
json ×1
libcurl ×1
oauth-2.0 ×1
racket ×1
ubuntu-14.04 ×1
xml ×1