- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用 ML-Agents 几个月了,并且一直在研究一双自平衡的腿。不过,从我开始工作的那天起,我就有一个问题一直困扰着我:我如何知道代理正在一起工作?我所做的只是复制并粘贴区域预制件 9 次。这就是让智能体更有效地学习所需要做的一切吗?还是我还缺少其他东西?谢谢。
代理脚本>>>(除了这个之外,我真的不需要使用任何其他脚本。区域和学院中什么也没有。)
using MLAgents;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MLAgents.Sensor;
using Random = UnityEngine.Random;
public class BalanceAgent : Agent {
private BalancingArea area;
public GameObject floor;
public GameObject finishBall;
public GameObject waist;
public GameObject wFront; //Used to check balance of waist.
public GameObject wBack; //Used to check balance of waist.
public GameObject hipR;
public GameObject hipL;
public GameObject buttR;
public GameObject buttL;
public GameObject thighR;
public GameObject thighL;
public GameObject legR;
public GameObject legL;
public GameObject footR;
public GameObject footL;
public BehaviorParameters behavePar;
public GameObject sensorFront;
public GameObject sensorBack;
public GameObject sensorLeft;
public GameObject sensorRight;
public float bodyMoveSensitivity = 0.5f;
public GameObject[] bodyParts = new GameObject[11];
HingeJoint[] hingeParts = new HingeJoint[11];
JointLimits[] jntLimParts = new JointLimits[11];
Vector3[] posStart = new Vector3[11];
Vector3[] eulerStart = new Vector3[11];
public Vector3 waistRot;
public float waistVec = 0;
public float buttRVec = 0;
public float buttLVec = 0;
public float thighRVec = 0;
public float thighLVec = 0;
public float legRVec = 0;
public float legLVec = 0;
public float footRVec = 0;
public float footLVec = 0;
public float hipRVec = 0;
public float hipLVec = 0;
public float waistPushXVec = 0;
public float waistPushZVec = 0;
float waistDir = 0;
float buttRDir = 0;
float buttLDir = 0;
float thighRDir = 0;
float thighLDir = 0;
float legRDir = 0;
float legLDir = 0;
float footRDir = 0;
float footLDir = 0;
float hipRDir = 0;
float hipLDir = 0;
float waistPushDirX = 0;
float waistPushDirZ = 0;
public void Start() {
bodyParts = new GameObject[] { waist /*0*/, buttR /*1*/, buttL /*2*/, thighR /*3*/, thighL /*4*/, legR /*5*/, legL /*6*/, footR /*7*/, footL /*8*/, hipR /*9*/, hipL /*10*/};
for (int i = 0; i < bodyParts.Length; i++) {
posStart[i] = bodyParts[i].transform.position;
eulerStart[i] = bodyParts[i].transform.eulerAngles;
if (bodyParts[i].GetComponent<HingeJoint>() != null) {
hingeParts[i] = bodyParts[i].GetComponent<HingeJoint>();
hingeParts[i].limits = jntLimParts[i];
}
}
}
public override void InitializeAgent() {
base.InitializeAgent();
area = GetComponentInParent<BalancingArea>();
}
public override void AgentReset() {
//floor.transform.eulerAngles = new Vector3(Random.Range(-10, 10), 0, Random.Range(-10, 10)); //Floor random rotation
//finishBall.transform.localPosition = new Vector3(Random.Range(-7, 7), .65f, Random.Range(-7, 7)); //Ball random position
jntLimParts[1].max = 0;
jntLimParts[1].min = jntLimParts[1].max - 1;
hingeParts[1].limits = jntLimParts[1];
jntLimParts[2].max = 0;
jntLimParts[2].min = jntLimParts[2].max - 1;
hingeParts[2].limits = jntLimParts[2];
jntLimParts[3].max = -15;
jntLimParts[3].min = jntLimParts[3].max - 1;
hingeParts[3].limits = jntLimParts[3];
jntLimParts[4].max = -15;
jntLimParts[4].min = jntLimParts[4].max - 1;
hingeParts[4].limits = jntLimParts[4];
jntLimParts[5].max = 15;
jntLimParts[5].min = jntLimParts[5].max - 1;
hingeParts[5].limits = jntLimParts[5];
jntLimParts[6].max = 15;
jntLimParts[6].min = jntLimParts[6].max - 1;
hingeParts[6].limits = jntLimParts[6];
jntLimParts[7].max = -15;
jntLimParts[7].min = jntLimParts[7].max - 1;
hingeParts[7].limits = jntLimParts[7];
jntLimParts[8].max = -15;
jntLimParts[8].min = jntLimParts[8].max - 1;
hingeParts[8].limits = jntLimParts[8];
jntLimParts[9].max = 0;
jntLimParts[9].min = jntLimParts[9].max - 1;
hingeParts[9].limits = jntLimParts[9];
jntLimParts[10].max = 0;
jntLimParts[10].min = jntLimParts[10].max - 1;
hingeParts[10].limits = jntLimParts[10];
for (int i = 0; i < bodyParts.Length; i++) {
bodyParts[i].transform.position = posStart[i];
bodyParts[i].transform.eulerAngles = eulerStart[i];
bodyParts[i].GetComponent<Rigidbody>().velocity = Vector3.zero;
bodyParts[i].GetComponent<Rigidbody>().angularVelocity = Vector3.zero;
if (bodyParts[i].GetComponent<HingeJoint>() != null) {
hingeParts[i] = bodyParts[i].GetComponent<HingeJoint>();
hingeParts[i].limits = jntLimParts[i];
}
}
//waist.transform.eulerAngles = new Vector3(0, Random.Range(0, 360), 0); //Random player direction
waistRot = waist.transform.eulerAngles;
}
public override void AgentAction(float[] vectorAction) {
waistVec = (int)vectorAction[0];
switch (waistVec) {
case 0:
waistDir = 0;
break;
case 1:
waistDir = bodyMoveSensitivity;
break;
case 2:
waistDir = -bodyMoveSensitivity;
break;
case 3:
waistDir = bodyMoveSensitivity * 2;
break;
case 4:
waistDir = -bodyMoveSensitivity * 2;
break;
case 5:
waistDir = bodyMoveSensitivity * 4;
break;
case 6:
waistDir = -bodyMoveSensitivity * 4;
break;
}
bodyParts[0].transform.Rotate(0, waistDir, 0);
buttRVec = (int)vectorAction[1];
switch (buttRVec) {
case 0:
buttRDir = 0;
break;
case 1:
buttRDir = bodyMoveSensitivity;
break;
case 2:
buttRDir = -bodyMoveSensitivity;
break;
case 3:
buttRDir = bodyMoveSensitivity * 2;
break;
case 4:
buttRDir = -bodyMoveSensitivity * 2;
break;
case 5:
buttRDir = bodyMoveSensitivity * 4;
break;
case 6:
buttRDir = -bodyMoveSensitivity * 4;
break;
}
if (jntLimParts[1].max < 60 && jntLimParts[1].min > -5) {
jntLimParts[1].max += buttRDir;
jntLimParts[1].min = jntLimParts[1].max - 1;
hingeParts[1].limits = jntLimParts[1];
}
else { //If joint is at limit,
if (jntLimParts[1].min <= -5) {
jntLimParts[1].max = -4;
}
else if (jntLimParts[1].max >= 60) {
jntLimParts[1].max = 59;
}
jntLimParts[1].min = jntLimParts[1].max - 1;
}
buttLVec = (int)vectorAction[2];
switch (buttLVec) {
case 0:
buttLDir = 0;
break;
case 1:
buttLDir = bodyMoveSensitivity;
break;
case 2:
buttLDir = -bodyMoveSensitivity;
break;
case 3:
buttLDir = bodyMoveSensitivity * 2;
break;
case 4:
buttLDir = -bodyMoveSensitivity * 2;
break;
case 5:
buttLDir = bodyMoveSensitivity * 4;
break;
case 6:
buttLDir = -bodyMoveSensitivity * 4;
break;
}
if (jntLimParts[2].max < 5 && jntLimParts[2].min > -60) {
jntLimParts[2].max += buttLDir;
jntLimParts[2].min = jntLimParts[2].max - 1;
hingeParts[2].limits = jntLimParts[2];
}
else { //If joint is at limit,
if (jntLimParts[2].min <= -60) {
jntLimParts[2].max = -58;
}
else if (jntLimParts[2].max >= 5) {
jntLimParts[2].max = 4;
}
jntLimParts[2].min = jntLimParts[2].max - 1;
}
thighRVec = (int)vectorAction[3];
switch (thighRVec) {
case 0:
thighRDir = 0;
break;
case 1:
thighRDir = bodyMoveSensitivity;
break;
case 2:
thighRDir = -bodyMoveSensitivity;
break;
case 3:
thighRDir = bodyMoveSensitivity * 2;
break;
case 4:
thighRDir = -bodyMoveSensitivity * 2;
break;
case 5:
thighRDir = bodyMoveSensitivity * 4;
break;
case 6:
thighRDir = -bodyMoveSensitivity * 4;
break;
}
if (jntLimParts[3].max < 80 && jntLimParts[3].min > -80) {
jntLimParts[3].max += thighRDir;
jntLimParts[3].min = jntLimParts[3].max - 1;
hingeParts[3].limits = jntLimParts[3];
}
else { //If joint is at limit,
if (jntLimParts[3].min <= -80) {
jntLimParts[3].max = -78;
}
else if (jntLimParts[3].max >= 80) {
jntLimParts[3].max = 79;
}
jntLimParts[3].min = jntLimParts[3].max - 1;
}
thighLVec = (int)vectorAction[4];
switch (thighLVec) {
case 0:
thighLDir = 0;
break;
case 1:
thighLDir = bodyMoveSensitivity;
break;
case 2:
thighLDir = -bodyMoveSensitivity;
break;
case 3:
thighLDir = bodyMoveSensitivity * 2;
break;
case 4:
thighLDir = -bodyMoveSensitivity * 2;
break;
case 5:
thighLDir = bodyMoveSensitivity * 4;
break;
case 6:
thighLDir = -bodyMoveSensitivity * 4;
break;
}
if (jntLimParts[4].max < 80 && jntLimParts[4].min > -80) {
jntLimParts[4].max += thighLDir;
jntLimParts[4].min = jntLimParts[4].max - 1;
hingeParts[4].limits = jntLimParts[4];
}
else { //If joint is at limit,
if (jntLimParts[4].min <= -80) {
jntLimParts[4].max = -78;
}
else if (jntLimParts[4].max >= 80) {
jntLimParts[4].max = 79;
}
jntLimParts[4].min = jntLimParts[4].max - 1;
}
legRVec = (int)vectorAction[5];
switch (legRVec) {
case 0:
legRDir = 0;
break;
case 1:
legRDir = bodyMoveSensitivity;
break;
case 2:
legRDir = -bodyMoveSensitivity;
break;
case 3:
legRDir = bodyMoveSensitivity * 2;
break;
case 4:
legRDir = -bodyMoveSensitivity * 2;
break;
case 5:
legRDir = bodyMoveSensitivity * 4;
break;
case 6:
legRDir = -bodyMoveSensitivity * 4;
break;
}
if (jntLimParts[5].max < -3 && jntLimParts[5].min > 80) {
jntLimParts[5].max += legRDir;
jntLimParts[5].min = jntLimParts[5].max - 1;
hingeParts[5].limits = jntLimParts[5];
}
else { //If joint is at limit,
if (jntLimParts[5].min <= -3) {
jntLimParts[5].max = -1;
}
else if (jntLimParts[5].max >= 80) {
jntLimParts[5].max = 79;
}
jntLimParts[5].min = jntLimParts[5].max - 1;
}
legLVec = (int)vectorAction[6];
switch (legLVec) {
case 0:
legLDir = 0;
break;
case 1:
legLDir = bodyMoveSensitivity;
break;
case 2:
legLDir = -bodyMoveSensitivity;
break;
case 3:
legLDir = bodyMoveSensitivity * 2;
break;
case 4:
legLDir = -bodyMoveSensitivity * 2;
break;
case 5:
legLDir = bodyMoveSensitivity * 4;
break;
case 6:
legLDir = -bodyMoveSensitivity * 4;
break;
}
if (jntLimParts[6].max < 80 && jntLimParts[6].min > -3) {
jntLimParts[6].max += legLDir;
jntLimParts[6].min = jntLimParts[6].max - 1;
hingeParts[6].limits = jntLimParts[6];
}
else { //If joint is at limit,
if (jntLimParts[6].min <= -3) {
jntLimParts[6].max = -1;
}
else if (jntLimParts[6].max >= 80) {
jntLimParts[6].max = 79;
}
jntLimParts[6].min = jntLimParts[6].max - 1;
}
footRVec = (int)vectorAction[7];
switch (footRVec) {
case 0:
footRDir = 0;
break;
case 1:
footRDir = bodyMoveSensitivity;
break;
case 2:
footRDir = -bodyMoveSensitivity;
break;
case 3:
footRDir = bodyMoveSensitivity * 2;
break;
case 4:
footRDir = -bodyMoveSensitivity * 2;
break;
case 5:
footRDir = bodyMoveSensitivity * 4;
break;
case 6:
footRDir = -bodyMoveSensitivity * 4;
break;
}
if (jntLimParts[7].max < 50 && jntLimParts[7].min > -50) {
jntLimParts[7].max += footRDir;
jntLimParts[7].min = jntLimParts[7].max - 1;
hingeParts[7].limits = jntLimParts[7];
}
else { //If joint is at limit,
if (jntLimParts[7].min <= -50) {
jntLimParts[7].max = -48;
}
else if (jntLimParts[7].max >= 50) {
jntLimParts[7].max = 49;
}
jntLimParts[7].min = jntLimParts[7].max - 1;
}
footLVec = (int)vectorAction[8];
switch (footLVec) {
case 0:
footLDir = 0;
break;
case 1:
footLDir = bodyMoveSensitivity;
break;
case 2:
footLDir = -bodyMoveSensitivity;
break;
case 3:
footLDir = bodyMoveSensitivity * 2;
break;
case 4:
footLDir = -bodyMoveSensitivity * 2;
break;
case 5:
footLDir = bodyMoveSensitivity * 4;
break;
case 6:
footLDir = -bodyMoveSensitivity * 4;
break;
}
if (jntLimParts[8].max < 50 && jntLimParts[8].min > -50) {
jntLimParts[8].max += footLDir;
jntLimParts[8].min = jntLimParts[8].max - 1;
hingeParts[8].limits = jntLimParts[8];
}
else { //If joint is at limit,
if (jntLimParts[8].min <= -50) {
jntLimParts[8].max = -48;
}
else if (jntLimParts[8].max >= 50) {
jntLimParts[8].max = 49;
}
jntLimParts[8].min = jntLimParts[8].max - 1;
}
hipRVec = (int)vectorAction[9];
switch (hipRVec) {
case 0:
hipRDir = 0;
break;
case 1:
hipRDir = bodyMoveSensitivity;
break;
case 2:
hipRDir = -bodyMoveSensitivity;
break;
case 3:
hipRDir = bodyMoveSensitivity * 2;
break;
case 4:
hipRDir = -bodyMoveSensitivity * 2;
break;
case 5:
hipRDir = bodyMoveSensitivity * 4;
break;
case 6:
hipRDir = -bodyMoveSensitivity * 4;
break;
}
if (jntLimParts[9].max < 45 && jntLimParts[9].min > -15) {
jntLimParts[9].max += hipRDir;
jntLimParts[9].min = jntLimParts[9].max - 1;
hingeParts[9].limits = jntLimParts[9];
}
else { //If joint is at limit,
if (jntLimParts[9].min <= -15) {
jntLimParts[9].max = -13;
}
else if (jntLimParts[9].max >= 45) {
jntLimParts[9].max = 44;
}
jntLimParts[9].min = jntLimParts[9].max - 1;
}
hipLVec = (int)vectorAction[10];
switch (hipLVec) {
case 0:
hipLDir = 0;
break;
case 1:
hipLDir = bodyMoveSensitivity;
break;
case 2:
hipLDir = -bodyMoveSensitivity;
break;
case 3:
hipLDir = bodyMoveSensitivity * 2;
break;
case 4:
hipLDir = -bodyMoveSensitivity * 2;
break;
case 5:
hipLDir = bodyMoveSensitivity * 4;
break;
case 6:
hipLDir = -bodyMoveSensitivity * 4;
break;
}
if (jntLimParts[10].max < 15 && jntLimParts[10].min > -45) {
jntLimParts[10].max += hipLDir;
jntLimParts[10].min = jntLimParts[10].max - 1;
hingeParts[10].limits = jntLimParts[10];
}
else { //If joint is at limit,
if (jntLimParts[10].min <= -45) {
jntLimParts[10].max = -43;
}
else if (jntLimParts[10].max >= 15) {
jntLimParts[10].max = 14;
}
jntLimParts[10].min = jntLimParts[10].max - 1;
}
waistPushXVec = (int)vectorAction[11];
switch (waistPushXVec) {
case 0:
waistPushDirX = 0;
break;
case 1:
waistPushDirX = -1;
break;
case 2:
waistPushDirX = 1;
break;
}
waistPushZVec = (int)vectorAction[12];
switch (waistPushZVec) {
case 0:
waistPushDirZ = 0;
break;
case 1:
waistPushDirZ = -1;
break;
case 2:
waistPushDirZ = 1;
break;
}
waist.GetComponent<Rigidbody>().AddForce(waistPushDirX, 0, waistPushDirZ); //Try to help move waist
//waist.transform.eulerAngles = new Vector3(0, waistRot.y, 0);
sensorFront.transform.eulerAngles = new Vector3(0, waist.transform.eulerAngles.y - 90, 0); //Forces sensor to look down constantly.
sensorBack.transform.eulerAngles = new Vector3(0, waist.transform.eulerAngles.y + 90, 0); //Forces sensor to look down constantly.
sensorLeft.transform.eulerAngles = new Vector3(0, waist.transform.eulerAngles.y - 180, 0); //Forces sensor to look down constantly.
sensorRight.transform.eulerAngles = new Vector3(0, waist.transform.eulerAngles.y, 0); //Forces sensor to look down constantly.
//Reward SYSTEM #####################################################################################################################################################################
AddReward(.1f); //Survival reward.
if (Mathf.Abs(finishBall.transform.position.x - waist.transform.position.x) > .25f && Mathf.Abs(finishBall.transform.position.z - waist.transform.position.z) > .25f) { //Maintain waist position to ball
AddReward(-.1f * Mathf.Abs(finishBall.transform.position.x - waist.transform.position.x));
}
if (waist.GetComponent<Rigidbody>().velocity.magnitude >= 20f) { //Maintain waist slow velocity.
AddReward(-.1f);
Done();
}
if (waist.transform.position.y < -2 || waist.transform.position.y > 6) { //Maintain waist height.
AddReward(-.1f * Mathf.Abs(finishBall.transform.position.y - waist.transform.position.y));
Done();
}
if (waist.transform.eulerAngles.y > waistRot.y + 25) { //Maintain waist rotation on Y
AddReward(-.1f * Mathf.Abs(waist.transform.eulerAngles.y - waistRot.y));
Done();
}
if (waist.transform.eulerAngles.y < waistRot.y - 25) { //Maintain waist rotation on Y
AddReward(-.1f * Mathf.Abs(waistRot.y - waist.transform.eulerAngles.y));
Done();
}
if (wFront.transform.position.y < wBack.transform.position.y - 25) { //Maintain waist rotation forward and backwards.
AddReward(-.1f * Mathf.Abs(wBack.transform.position.y - wFront.transform.position.y));
Done();
}
if (wFront.transform.position.y > wBack.transform.position.y + 25) { //Maintain waist rotation forward and backwards.
AddReward(-.1f * Mathf.Abs(wFront.transform.position.y - wBack.transform.position.y));
Done();
}
if (buttR.transform.position.y < buttL.transform.position.y - 25) { //Maintain waist rotation left and right.
AddReward(-.1f * Mathf.Abs(buttL.transform.position.y - buttR.transform.position.y));
Done();
}
if (buttR.transform.position.y > buttL.transform.position.y + 25) { //Maintain waist rotation left and right.
AddReward(-.1f * Mathf.Abs(buttR.transform.position.y - buttL.transform.position.y));
Done();
}
/*
if (waist.transform.position.x > posStart[0].x + 10 || waist.transform.position.x < posStart[0].x - 10 || waist.transform.position.z > posStart[0].z + 10 || waist.transform.position.z < posStart[0].z - 10) { //Maintain waist position.
AddReward(-.01f);
Done();
}
*/
//Reward SYSTEM #####################################################################################################################################################################
}
public override void CollectObservations() {
for (int i = 0; i < bodyParts.Length; i++) {
AddVectorObs(bodyParts[i].transform.position);
AddVectorObs(bodyParts[i].transform.eulerAngles);
AddVectorObs(bodyParts[i].GetComponent<Rigidbody>().velocity);
AddVectorObs(bodyParts[i].GetComponent<Rigidbody>().angularVelocity);
AddVectorObs(jntLimParts[i].max);
AddVectorObs(jntLimParts[i].min);
}
AddVectorObs(wFront.transform.position.y);
AddVectorObs(wFront.transform.eulerAngles);
AddVectorObs(wBack.transform.position.y);
AddVectorObs(wBack.transform.eulerAngles);
AddVectorObs(waistRot); //Waist rotation value after randomization.
AddVectorObs(finishBall.transform.position); //Waist rotation value after randomization.
}
}
最佳答案
我相信是的,您所需要做的就是拥有预制件的多个实例。只要场景中有多个区域,它们就应该能够协调批处理进行学习。
如果你想衡量多个区域如何改变事情,我会选择一个区域并让它玩一段时间,然后查看累积奖励与剧集数量的图表,看看它能达到多高,然后执行许多区域都是相同的东西,看看同一张图表看起来如何。
关于unity-game-engine - 我如何知道代理正在协同工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60142521/
我完全不同意配置代理来检查我正在开发的应用程序的 HTTP(S) 流量。我试过运行 Fiddler2 和 Charles Web Proxy,它们都在 127.0.0.1:888 上运行,并使用以下参
我有一个 AWS 环境,其中有几个实例没有预安装 SSM 代理,也没有 key 对,有没有办法在不使用 SSH 登录我的实例的情况下安装 SSM 代理? 在此先感谢您的帮助! 最佳答案 没有。这是一个
在本教程中,您将借助示例了解 JavaScript 代理。 在 JavaScript 中,proxy(代理对象)用于包装对象并将各种操作重新定义到对象中,例如读取、插入、验证等。代理允许您向对
我有一个基于 Martini 的小型应用程序,但遇到了一个我无法解决的问题。 我想添加一个应用程序功能,允许用户从第三个服务器获取文件,并在 HTTP header 中进行一些更改。某种代理。这些文件
结构对比 讲实话,博主当初学习完整设计模式时,这三种设计模式单独摘哪一种都是十分清晰和明确的,但是随着模式种类的增加,在实际使用的时候竟然会出现恍惚,例如读开源代码时,遇到不以模式命名规范的代码时,
我正在尝试代理运行 ELK 的后端服务器。这是我的环境信息: root@proxy:~# root@proxy:~# cat /etc/*release DISTRIB_ID=Ubuntu DISTR
我需要为我的 java 应用程序编写一个代理,它在每个数组创建时执行一些特定的操作。到目前为止,我无法找到在此事件上运行我的代码的任何方法。 java.lang.instrument.ClassFil
PHP 代理如何工作? 我希望制作一个类似于其他 php 代理的小脚本 但是它实际上是如何工作的呢? 最佳答案 我正在考虑一个 PHP 代理,用于绕过 AJAX Sane Origin 策略。如果您需
我有一个 Electron 应用程序,试图通过该应用程序从同一网络调用url,但是出于安全考虑,我考虑了使用代理的想法。 function createWindow () { const mai
我有 1 台计算机,安装了 1 个网卡。网卡有 10 个 IP 地址分配给它。我在那里运行了一个 Windows 桌面应用程序。该应用程序基本上是一个调用 1 个特定网站的网络浏览器。 我想要实现的是
我想将 Burp 配置为我的 java 代码的代理,以查看请求和响应。Burp 作为 Web 浏览器之间的代理可以很好地工作,但它不适用于 Java 应用程序。 我已经在代码中添加了这样的行: Web
据我所知,在Spring AOP中,当我们想要拦截某些方法调用时,我们会配置一个具有与所需方法调用相匹配的切入点配置的Aspect。也就是说,我们在Aspect端配置拦截。 有没有一种方法可以完全从相
这可能是一个常见问题,但是:我有一个正在向 发出请求的应用程序elldmess.cz/api/... 但是这个api已经没有了。 现在我想要“东西”,即 catch 对 elldmess.cz/api
我正在尝试在 Android 中创建代理,但我必须使用套接字。我已经阅读了很多教程并提出了以下代码。不幸的是,浏览器似乎没有获得任何数据,一段时间后它显示标准网页,说网页不可用。可能是什么原因?感谢您
我在使用此代码时遇到了一些问题,具体取决于我使用的浏览器,有些 URL 在 IE 中显示正确,但在 Firefox 中显示为纯文本(例如 www.microsoft.es 在 IE 上看起来不错,但在
我正在尝试通过 urllib 获取一些 url 并通过我的代理进行 Mechanize 。 使用 mechanize 我尝试以下操作: from mechanize import Browser im
我安装了一个嵌入式设备(光伏转换器),它提供了一个正常的 http Web 界面(信息和设置)。该转换器具有用户身份验证,但只能通过 http 进行。出于安全考虑,我不想将服务器直接发布到互联网上。在
我正在搜索有关如何使用支持 HTTPS 的 Ruby 编写代理的一些示例。我有一个使用 Webricks HTTPProxyServer 实现的简单代理,但我注意到,HTTPS 流量只是隧道传输(它应
我的一位客户刚收到他选择的开发商订购的软件,让我看一下并准备托管程序。 这是一个 Java (jar) 应用程序,到目前为止一切顺利......但我看到了一些可疑的东西,软件每隔 60 分钟左右连接到
我试图在 C# 中创建一个 HTTPS 代理服务器。这里有人发布了解决方案: string host = "encrypted.google.com"; string
我是一名优秀的程序员,十分优秀!