我正在尝试从Adobe AIR应用程序中请求需要基本授权标头的HTTP资源.我尝试手动将标头添加到请求中,以及使用setRemoteCredentials()方法设置它们,但无济于事.
这是代码:
<mx:Script>
<![CDATA[
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
private function authAndSend(service:HTTPService):void
{
service.setRemoteCredentials('someusername', 'somepassword');
service.send();
}
private function resultHandler(event:ResultEvent):void
{
apiResult.text = event.result.toString();
}
private function resultFailed(event:FaultEvent):void
{
apiResult.text = event.fault.toString();
}
]]>
</mx:Script>
<mx:HTTPService id="apiService"
url="https://mywebservice.com/someFileThatRequiresBasicAuth.xml"
resultFormat="text"
result="resultHandler(event)"
fault="resultFailed(event)" />
<mx:Button id="apiButton"
label="Test API Command"
click="authAndSend(apiService)" />
<mx:TextArea id="apiResult" />
Run Code Online (Sandbox Code Playgroud)
但是,仍然会弹出标准的基本身份验证对话框,提示用户输入用户名和密码.我有一种感觉,我没有以正确的方式做到这一点,但我能找到的所有信息(Flex文档,博客,谷歌等)要么没有用,要么太模糊无法提供帮助.
任何黑魔法,哦Flex大师?谢谢.
编辑:将setRemoteCredentials()更改为setCredentials()会产生以下ActionScript错误:
[MessagingError message='Authentication not supported on DirectHTTPChannel (no proxy).']
Run Code Online (Sandbox Code Playgroud)
编辑:经过Adobe的一些关注后,问题解决了.有关完整说明,请参阅下面的帖子.此代码适用于任意长度的HTTP身份验证标头.
import mx.utils.Base64Encoder;
private function authAndSend(service:HTTPService):void
{
var encoder:Base64Encoder = new Base64Encoder();
encoder.insertNewLines = false; …Run Code Online (Sandbox Code Playgroud) 我使用以下命令来停止HTTP服务
net stop http /y
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
服务正在开始或停止.请稍后再试.
现在HTTP服务处于中间状态.它既没有停止也没有开始.我该怎么办?
我读了一些类似的问题,但他们没有帮助.
我试图在httpservice上设置json内容类型,以使REST服务返回json数据.当我在fiddler中添加内容类型时,所有工作正常,因此问题在flex应用程序中,而不是在Web服务中.但是下面的代码不起作用,我得到xml数据而不是json.
有人能为我提供解决方法/解决方案吗?
MXML:
<s:HTTPService id="service" method="POST" url="server.com"
result="loaded(event)" fault="fault(event)"
useProxy="false" resultFormat="text">
Run Code Online (Sandbox Code Playgroud)
动作:
public function loadAllSamples():void {
service.contentType = "application/json";
service.send('something');
}
Run Code Online (Sandbox Code Playgroud) 我在我的项目中使用 Axios 来调用一些第三方端点。我似乎不明白错误
Nest can't resolve dependencies of the HttpService (?). Please make sure that the argument
AXIOS_INSTANCE_TOKEN at index [0] is available in the TimeModule context.
Potential solutions:
- If AXIOS_INSTANCE_TOKEN is a provider, is it part of the current TimeModule?
- If AXIOS_INSTANCE_TOKEN is exported from a separate @Module, is that module imported within TimeModule?
@Module({
imports: [ /* the Module containing AXIOS_INSTANCE_TOKEN */ ]
})
Run Code Online (Sandbox Code Playgroud)
这是模块
@Module({
imports: [TerminalModule,],
providers: [TimeService, HttpService],
controllers: [TimeController]
})
export class …Run Code Online (Sandbox Code Playgroud) 当 Web 服务调用失败并且调用我的“故障”事件侦听器时,如何访问 HTTP 响应正文?我可以看到原始消息,但找不到访问响应的方法。
这是我调用网络服务的方式
var connect: HTTPService = new HTTPService;
connect.url = "https://app.XYZ.org/services/code?format=xml";
connect.method = "POST";
connect.contentType = "application/x-www-form-urlencoded";
connect.showBusyCursor = true;
connect.resultFormat = "xml";
connect.addEventListener("result", retrieveResults);
connect.addEventListener("fault", retrieveResults);
var params:Object = new Object;
params.username = user;
params.password = password;
params.code = "123";
connect.request = params;
connect.send();
Run Code Online (Sandbox Code Playgroud)
和我的事件处理函数
private function retrieveResults(event:Event): void
{
var success:Boolean = event.type == ResultEvent.RESULT;
..
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用Felix实现的OSGi HTTP服务启动Wicket应用程序,因为我只是使用WicketServletwith applicationClassName参数注册服务:
props.put("applicationClassName", MainApplication.class.getName());
service = (HttpService)context.getService(httpReference);
service.registerServlet("/", new WicketServlet(), props, null);
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用Felix Whiteboard实现并将Web服务注册为Servlet一个:
props.put("alias", "/");
props.put("init.applicationClassName", MainApplication.class.getName());
registration = context.registerService(Servlet.class.getName(), new WicketServlet(), props);
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,当我使用Pax Runner和Felix(mvn package install pax:run -Dframework=felix -Dprofiles=log,config)部署它时失败,异常似乎与以下内容有关ClassLoader:
[Jetty HTTP Service] ERROR org.apache.felix.http.whiteboard - Failed to register servlet
org.apache.wicket.WicketRuntimeException: Unable to create application of class es.warp.sample.HTTPLocalGUI.MainApplication
....
....
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
....
....
Run Code Online (Sandbox Code Playgroud)
我试图导出捆绑中的所有内容,它也是如此.
最奇怪的是,如果我使用Equinox(mvn package install pax:run -Dframework=felix -Dprofiles=log,config …
我想知道如何转换URI:
%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%20%D1%8F%D0%B7%D1%8B%D0%BA
Run Code Online (Sandbox Code Playgroud)
至
??????? ????
Run Code Online (Sandbox Code Playgroud)
我知道urldecodePHP中的函数.我在Java(Android)中寻找相同的功能.有人能帮助我吗?谢谢.
我正在使用带有POST操作的HTTPService来提交Base64编码文件(取自应用程序中的位图数据),但我真的可以了解POST操作的进度(例如FileReference.upload()) .
我不认为这是可能的,但如果是这样的话会很棒(通过任何方式,我都愿意改变我的设置来获得这个).
好的,我有一个只要从send()调用得到结果就HTTPService执行该dataLoaded(e:ResultEvent):void函数.
好的,如果我在前一个收到结果之前再次呼叫HTTPService.send()然后HTTPService.send()再次呼叫,我最终会反复运行dataLoaded(),这是不可取的
我想要的是如果HTTPService.send()在之前的调用之前调用它返回结果.我想取消第一个呼叫,只处理上次呼叫的结果HTTPService.send()
我希望这是有道理的.
我怎样才能做到这一点??
谢谢!!
我正在尝试做一个图像上传器,用户可以:
- 使用button.browse浏览本地文件
- 选择一个并将其保存为FileReference.
- 然后我们做FileReference.load()然后将数据绑定到我们的图像控件.
- 在我们对其进行旋转并更改图像数据之后.
- 并完成我们将其上传到服务器.
要更改图像数据,我将获得显示图像的矩阵并对其进行转换,然后重新使用新矩阵并将其绑定到我的旧图像:
private function TurnImage():void
{
//Turn it
var m:Matrix = _img.transform.matrix;
rotateImage(m);
_img.transform.matrix = m;
}
Run Code Online (Sandbox Code Playgroud)
现在主要的是我真的不知道如何将数据作为文件发送到我的服务器,因为它没有存储在FileReference中,FileReference中的数据是readOnly所以我们无法更改它或创建新的,所以我可以不要使用.upload();.
然后我尝试了HttpService.send,但我无法弄清楚你是如何发送文件而不是mxml的.
在哪里可以找到实现由AsyncToken和AsyncResponder异步调用的HTTPService的Flex应用程序示例?提前致谢
httpservice以一定的频率发送这样的字符串:
行号列#号#行号列#号#行号列#号#....
编辑代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application creationComplete="onCreationComplete()"
xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.rpc.remoting.RemoteObject;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.http.mxml.HTTPService;
import mx.rpc.AsyncRequest;
import mx.rpc.AsyncResponder;
import mx.rpc.AsyncToken;
import mx.collections.ArrayCollection;
import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
import mx.controls.AdvancedDataGrid;
import mx.controls.Alert;
import mx.rpc.IResponder;
[Bindable]
public var dataList:ArrayCollection;
public function getResults(source:String) : ArrayCollection {
var ac:ArrayCollection = new ArrayCollection();
var data:Array = source.split('#');
for (var i:int = 0; i < data.length; i += 3) {
var dataObj:Object = {row: data[i], column: data[i+1], value: data[i+2]};
ac.addItem(dataObj)
}
return …Run Code Online (Sandbox Code Playgroud) apache-flex asynchronous httpresponse httpservice asynctoken
我有一个flex应用程序,允许用户创建一些内容.然后,此内容将通过xml发送回服务器:
private function saveBackXMLToServer():void {
var params:Object = {};
params["xml_file"] = XML_content();
http_Service.send(params);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,以这种方式传输数据非常慢...... 10'000行XML需要大约20秒......如何才能做得更好?
提前致谢!
马库斯
更新:嗨,大家好,感谢您的所有评论.我试图遵循你的所有提示,但它们似乎并不容易改变.我的代码以我无法访问每个Object的方式完成,并保存它.所以我要做的是用一个xml加载swf文件,并在运行后返回整个xml.我的猜测是,没有花时间将这些行传输到Web服务器(这个任务可以快速正常完成),我发现HTTPService的send函数发生了一些事情,每个对象都必须在发送之前发生变化...
UPDATE2:我刚刚意识到这不是flex应用程序的问题,它是rails应用程序的问题.它接收700 KB字符串.我想没有办法处理这样的对象.怎么运输呢?我尝试使用文件上传但无法完成它...错误2037发生了!我会继续努力.
httpservice ×13
apache-flex ×9
actionscript ×1
air ×1
android ×1
apache-felix ×1
asynchronous ×1
asynctoken ×1
axios ×1
browser ×1
flex4 ×1
gumbo ×1
httprequest ×1
httpresponse ×1
java ×1
json ×1
nestjs ×1
node.js ×1
osgi ×1
upload ×1
wicket ×1
xml ×1