Générique/Inconnu Erreur HTTP avec le code de réponse 0 à l'aide de UnityWebRequest
J'ai essayé d'utiliser certaines fonctions de l'API du serveur, et soudainement venu à cette erreur. Je vais expliquer par la suite l'exemple de code:
public IEnumerator Post(Dictionary<string, string> data)
{
var request = UnityWebRequest.Post(Url, data);
request.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");
yield return request.Send();
if (request.isError)
UpdateNetworkLog("Network error has occured: " + request.error);
else
//Some code after success
}
Comme vous pouvez le voir, surtout que je l'ai pris à partir de l'Unité manuel considérant les requêtes POST ici. Mais, il y a un problème - la demande ne jamais fini correctement, il a toujours l'erreur (ce qui est indiqué à l'aide d'UpdateNetworkLog fonction): "Générique/inconnu erreur HTTP", alors que la demande de code de réponse est de 0. Aussi, j'ai essayé d'utiliser la méthode classique de ce manuel et WWW classe obtenir le même résultat.
Je pense, le problème est dans la façon dont l'Unité obtient la réponse: j'ai vérifié les paquets via Wireshark, à la fois mon POST de demande et de réponse du serveur sont parfaitement bien, pas d'erreurs ou de fautes.
Un autre problème important est que je suis en utilisant WebGL, et tout droit dans l'Éditeur de programme obtient la bonne réponse et fonctionne correctement, l'erreur n'apparaît qu'après j'ai de construire et de lancer le jeu dans le navigateur (testé sur Chrome et Safari). Aussi, essayé de le lancer à l'aide de pas de l'Unité de WebGL Joueur, mais XAMPP: le même.
Merci pour toutes les réponses, que Google ne sait rien à ce sujet.
- Peut-être essayer un certain approche différente, comme ce one
Vous devez vous connecter pour publier un commentaire.
Potentiel De La Solution 1
De la L'unité de documentation sur l'utilisation de
UnityWebRequest
avec WebGL:Ma meilleure supposition est que ce serveur que vous tentez d'accéder n'ont pas la SCRO correctement mis en place ou configuré. Lorsque votre code est exécuté dans un navigateur, le navigateur lui-même est le traitement de la demande et, par conséquent, de l'asservissement votre code pour que le navigateur des restrictions de sécurité. Votre programme et le serveur ne sont pas sur le même domaine, et le navigateur ne prend pas comme ça.
Si c'est votre problème, puis, sans plus d'informations, il est difficile pour moi de vous suggérer une solution. À partir de votre post, il semble que vous pourriez être relativement nouveau pour le codage (ou au moins pour HTTP codage), et la meilleure des solutions que je peux trouver à votre problème impliquer certains relativement complexe méthodes, telles que à l'aide de JavaScript au lieu de
UnityWebRequest
.Potentiel De La Solution 2
Bien sûr, le problème peut même mentir avec votre code environnant la place, ou avec le serveur auquel vous essayez d'accéder. Quel est votre code de la fonction qui s'appelle
Post()
? Il pourrait y avoir un problème avec l'ordre des événements qui montre que quand le code est exécuté dans un navigateur (où le JavaScript est de la manipulation de la requête POST).Sur une note de côté, si le serveur auquel vous essayez d'accéder a la documentation pour leur API, votre problème pourrait être abordé quelque part en elle.
La première chose à souligner est que UnityWebRequest renvoie en fait la réponse dans
demande.downloadHandler.texte
Tout en ne rentrant de l'erreur générale de l'information dans
demande.erreur
Maintenant, si votre cas est semblable à la mienne et la mise à niveau de l'Unité seulement d'avoir toutes vos code réseau de pause, l'erreur que vous aurez probablement voir est liée à Content-Length
C'est parce que pour le WWW et UnityWebRequest classe ont maintenant chunkedTransfer par défaut. Cela semble à vis de la façon dont la longueur du contenu est envoyé sur et les causes de l'erreur.
Tout chunkedTransfer peut actuellement être désactivé pour UnityWebRequest, il ne peut pas être désactivé pour WWW classe au moment d'écrire ces lignes. Pour moi cela signifiait réécriture de mon ancien code de réseau à utiliser UnityWebRequest et mettre de
myUnityWebRequest.chunkedTransfer = false;
Remarque: UnityWebRequest ne prend pas actuellement en charge les Postes ne disposant pas de données. Vous devez toujours utiliser le WWW classe pour cette.
Ce problème est très commun. Si vous avez travaillé avec l'API Rest, alors les choses sont assez faciles à comprendre.
Permettre de la SCRO:
J'ai créé une API rest à l'aide de python flacon et il est hébergé dans Heroku. L'avantage de Heroku était-il le soutien de la SCRO par défaut et vous n'avez pas besoin de le configurer. De nos jours maximum serveur sur lequel vous hébergez votre application python a le même établissement. Ainsi, ceux qui ont de la SCRO liées problème qu'ils ont d'abord activer CROS, c'est obligatoire.
Test En Facteur:
Il est nécessaire de tester votre API en Facteur. Si votre application ne prend pas en charge la SCRO encore il travaillera en Facteur. Ainsi, travailler dans le postier ne garantit pas qu'il sera exécuté dans l'Unité.
La prochaine chose importante à considérer est les en-Têtes que vous utilisez dans le postier.
Comme : {"Key":"Content-Type" , "value":"application/json" }
parce que vous avez aussi besoin de transmettre à l'unité www-tête.
La prochaine chose que doit observer est ce que vous êtes de passage dans le corps et comment vous la transmettre. Normalement, nous l'envoyer sous forme de JSON(application/json) en Facteur.
Comme:
Maintenant, si votre SCRO activé API travaille très bien en Facteur puis tout simplement se détendre, il va également travailler dans l'unité.
L'Unité De La Partie :
D'abord je dois créer une classe qui va convertir en Json.
Prochaine chose que vous devez convertir l'objet en json.
Prochaine, convertir en json dans l'octet et de faire le post avec l'en-tête.
Ne pas oublier de l'écrire dans un Énumérateur.
Si vous utilisez quelque chose de
comme:
Vous obtiendrez une Erreur Générique /Inconnu parce que l'Unité de Requête Web ne peut pas faire de l'afficher ou de transmettre les données de votre API requis dans ce cas.
REMARQUE:
Peu de temps 400 Bad request est également servi comme une inconnue Générique/Inconnu HTTP Erreur dans l'unité. Donc, ne pas oublier de vérifier le code dans le backend pour vous assurer que votre API n'est pas une exception .